Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Scopri se un oggetto è una funzione con valori di tabella in SQL Server con OBJECTPROPERTY()

Puoi usare OBJECTPROPERTY() funzione in SQL Server per verificare se un oggetto è una funzione con valori di tabella o meno.

Per fare ciò, passa l'ID oggetto come primo argomento e IsTableFunction come secondo argomento. La funzione restituisce un 1 o un 0 a seconda che si tratti o meno di una funzione con valori di tabella.

Un valore restituito di 1 significa che è una funzione con valori di tabella e un valore di 0 significa che non lo è.

Esempio 1 – Utilizzo di base

Ecco un rapido esempio da dimostrare.

USE Music;
SELECT OBJECTPROPERTY(34099162, 'IsTableFunction') AS [IsTableFunction];

Risultato:

+-------------------+
| IsTableFunction   |
|-------------------|
| 1                 |
+-------------------+

In questo caso, la Musica database ha un oggetto con l'ID fornito ed è una funzione con valori di tabella.

Esempio 2:ottenere l'ID oggetto

Se conosci il nome dell'oggetto, ma non il suo ID, puoi utilizzare OBJECT_ID() funzione per recuperare l'ID in base al suo nome.

Esempio:

SELECT OBJECTPROPERTY(OBJECT_ID('ufn_AlbumsByGenre'), 'IsTableFunction') AS [IsTableFunction];

Risultato:

+-------------------+
| IsTableFunction   |
|-------------------|
| 1                 |
+-------------------+

Questo è lo stesso oggetto dell'esempio precedente.

Eccolo di nuovo con l'output ID separatamente.

SELECT 
  OBJECT_ID('ufn_AlbumsByGenre') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('ufn_AlbumsByGenre'), 'IsTableFunction') AS [IsTableFunction];

Risultato:

+-------------+-------------------+
| Object ID   | IsTableFunction   |
|-------------+-------------------|
| 34099162    | 1                 |
+-------------+-------------------+

Esempio 3:quando l'oggetto NON è una funzione con valori di tabella

Ecco cosa succede quando l'oggetto non è una funzione con valori di tabella.

SELECT OBJECTPROPERTY(885578193, 'IsTableFunction') AS [IsTableFunction];

Risultato:

+-------------------+
| IsTableFunction   |
|-------------------|
| 0                 |
+-------------------+

In questo caso, il database fa ho un oggetto con quell'ID, ma l'oggetto è in realtà una tabella utente (non una funzione con valori di tabella), quindi ottengo un risultato negativo.

Eccolo di nuovo usando OBJECT_ID() .

SELECT 
  OBJECT_ID('Artists') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Artists'), 'IsTableFunction') AS [IsTableFunction],
  OBJECTPROPERTY(OBJECT_ID('Artists'), 'IsUserTable') AS [IsUserTable];

Risultato:

+-------------+-------------------+---------------+
| Object ID   | IsTableFunction   | IsUserTable   |
|-------------+-------------------+---------------|
| 885578193   | 0                 | 1             |
+-------------+-------------------+---------------+

Ho anche verificato se l'oggetto è una tabella definita dall'utente e il risultato è positivo.

Esempio 4 – L'oggetto non esiste

SQL Server presuppone che l'ID oggetto si trovi nel contesto del database corrente. Se passi un ID oggetto da un database diverso, otterrai un risultato NULL o otterrai risultati errati.

SELECT 
  OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'IsTableFunction') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsTableFunction') AS [12345678];

Risultato:

+-----------------+------------+
| InvalidObject   | 12345678   |
|-----------------+------------|
| NULL            | NULL       |
+-----------------+------------+

In questo caso il database non contiene oggetti con quel nome o ID, quindi ottengo un risultato NULL.

Otterrai anche NULL in caso di errore o se non disponi dell'autorizzazione per visualizzare l'oggetto.