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.