Du kan använda OBJECTPROPERTY()
funktion i SQL Server för att kontrollera om ett objekt är en tabellvärderad funktion eller inte.
För att göra detta, skicka objekt-ID som det första argumentet och IsTableFunction
som det andra argumentet. Funktionen returnerar en 1
eller en 0
beroende på om det är en tabellvärderad funktion eller inte.
Ett returvärde på 1
betyder att det är en tabellvärderad funktion och värdet 0
betyder att det inte är det.
Exempel 1 – Grundläggande användning
Här är ett snabbt exempel att visa.
USE Music; SELECT OBJECTPROPERTY(34099162, 'IsTableFunction') AS [IsTableFunction];
Resultat:
+-------------------+ | IsTableFunction | |-------------------| | 1 | +-------------------+
I det här fallet, Musik databasen har ett objekt med det angivna ID, och det är en tabellvärderad funktion.
Exempel 2 – Hämta objekt-ID
Om du känner till objektets namn, men inte dess ID, kan du använda OBJECT_ID()
funktion för att hämta ID baserat på dess namn.
Exempel:
SELECT OBJECTPROPERTY(OBJECT_ID('ufn_AlbumsByGenre'), 'IsTableFunction') AS [IsTableFunction];
Resultat:
+-------------------+ | IsTableFunction | |-------------------| | 1 | +-------------------+
Detta är samma objekt från föregående exempel.
Här är den igen med ID-utgången separat.
SELECT OBJECT_ID('ufn_AlbumsByGenre') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('ufn_AlbumsByGenre'), 'IsTableFunction') AS [IsTableFunction];
Resultat:
+-------------+-------------------+ | Object ID | IsTableFunction | |-------------+-------------------| | 34099162 | 1 | +-------------+-------------------+
Exempel 3 – När objektet INTE är en tabellvärderad funktion
Det här är vad som händer när objektet inte är en funktion med tabellvärde.
SELECT OBJECTPROPERTY(885578193, 'IsTableFunction') AS [IsTableFunction];
Resultat:
+-------------------+ | IsTableFunction | |-------------------| | 0 | +-------------------+
I det här fallet gör det databasen har ett objekt med det ID:t, men objektet är faktiskt en användartabell (inte en funktion med tabellvärde), så jag får ett negativt resultat.
Här använder den återigen OBJECT_ID()
.
SELECT OBJECT_ID('Artists') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Artists'), 'IsTableFunction') AS [IsTableFunction], OBJECTPROPERTY(OBJECT_ID('Artists'), 'IsUserTable') AS [IsUserTable];
Resultat:
+-------------+-------------------+---------------+ | Object ID | IsTableFunction | IsUserTable | |-------------+-------------------+---------------| | 885578193 | 0 | 1 | +-------------+-------------------+---------------+
Jag kollade också för att se om objektet är en användardefinierad tabell och resultatet är positivt.
Exempel 4 – Objekt existerar inte
SQL Server antar att objekt-ID:t finns i den aktuella databaskontexten. Om du skickar in ett objekt-ID från en annan databas får du antingen ett NULL-resultat eller så får du felaktiga resultat.
SELECT OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'IsTableFunction') AS [InvalidObject], OBJECTPROPERTY(12345678, 'IsTableFunction') AS [12345678];
Resultat:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
I det här fallet innehåller databasen inga objekt med det namnet eller ID, så jag får ett NULL-resultat.
Du får också NULL vid fel eller om du inte har behörighet att visa objektet.