Můžete použít OBJECTPROPERTY()
funkce na serveru SQL Server ke kontrole, zda je objekt funkcí s hodnotou tabulky či nikoli.
Chcete-li to provést, předejte ID objektu jako první argument a IsTableFunction
jako druhý argument. Funkce vrací 1
nebo 0
v závislosti na tom, zda se jedná o funkci s tabulkovou hodnotou.
Vrácená hodnota 1
znamená, že je funkce s tabulkovou hodnotou a hodnota 0
znamená, že není.
Příklad 1 – Základní použití
Zde je rychlý příklad k demonstraci.
USE Music; SELECT OBJECTPROPERTY(34099162, 'IsTableFunction') AS [IsTableFunction];
Výsledek:
+-------------------+ | IsTableFunction | |-------------------| | 1 | +-------------------+
V tomto případě Hudba databáze má objekt s poskytnutým ID a je to funkce s tabulkovou hodnotou.
Příklad 2 – Získání ID objektu
Pokud znáte název objektu, ale neznáte jeho ID, můžete použít OBJECT_ID()
funkce pro načtení ID na základě jeho názvu.
Příklad:
SELECT OBJECTPROPERTY(OBJECT_ID('ufn_AlbumsByGenre'), 'IsTableFunction') AS [IsTableFunction];
Výsledek:
+-------------------+ | IsTableFunction | |-------------------| | 1 | +-------------------+
Jedná se o stejný objekt z předchozího příkladu.
Zde je to opět s výstupem ID samostatně.
SELECT OBJECT_ID('ufn_AlbumsByGenre') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('ufn_AlbumsByGenre'), 'IsTableFunction') AS [IsTableFunction];
Výsledek:
+-------------+-------------------+ | Object ID | IsTableFunction | |-------------+-------------------| | 34099162 | 1 | +-------------+-------------------+
Příklad 3 – Když objekt NENÍ funkcí s hodnotou tabulky
Zde je to, co se stane, když objekt není funkcí s tabulkovou hodnotou.
SELECT OBJECTPROPERTY(885578193, 'IsTableFunction') AS [IsTableFunction];
Výsledek:
+-------------------+ | IsTableFunction | |-------------------| | 0 | +-------------------+
V tomto případě databáze dělá mít objekt s tímto ID, ale objekt je ve skutečnosti uživatelská tabulka (nikoli funkce s tabulkovou hodnotou), takže dostanu negativní výsledek.
Zde je to opět pomocí OBJECT_ID()
.
SELECT OBJECT_ID('Artists') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Artists'), 'IsTableFunction') AS [IsTableFunction], OBJECTPROPERTY(OBJECT_ID('Artists'), 'IsUserTable') AS [IsUserTable];
Výsledek:
+-------------+-------------------+---------------+ | Object ID | IsTableFunction | IsUserTable | |-------------+-------------------+---------------| | 885578193 | 0 | 1 | +-------------+-------------------+---------------+
Také jsem zkontroloval, zda je objekt uživatelsky definovanou tabulkou a výsledek je pozitivní.
Příklad 4 – Objekt neexistuje
SQL Server předpokládá, že ID objektu je v aktuálním kontextu databáze. Pokud předáte ID objektu z jiné databáze, dostanete buď výsledek NULL, nebo nesprávné výsledky.
SELECT OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'IsTableFunction') AS [InvalidObject], OBJECTPROPERTY(12345678, 'IsTableFunction') AS [12345678];
Výsledek:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
V tomto případě databáze neobsahuje žádné objekty tohoto jména nebo ID, takže dostanu výsledek NULL.
Při chybě nebo v případě, že nemáte oprávnění k zobrazení objektu, získáte také hodnotu NULL.