OBJECTPROPERTY()
Funkce v SQL Server vám umožňuje zkontrolovat objekt pro konkrétní vlastnost.
Tuto funkci můžete použít ke kontrole, zda je objekt systémovou tabulkou nebo ne. Chcete-li to provést, předejte ID objektu jako první argument a IsSystemTable
jako druhý argument. Funkce vrací 1
nebo 0
v závislosti na tom, zda se jedná o systémovou tabulku (1
znamená, že je systémovou tabulku a 0
znamená, že není).
Příklad 1 – Základní použití
Zde je rychlý příklad k demonstraci.
SELECT OBJECTPROPERTY(3, 'IsSystemTable') AS [IsSystemTable];
Výsledek:
+-----------------+ | IsSystemTable | |-----------------| | 1 | +-----------------+
V tomto případě objekt je systémovou tabulku.
Příklad 2 – Objekt NENÍ systémovou tabulkou
Zde je to, co se stane, když objekt není systémovou tabulkou.
SELECT OBJECTPROPERTY(1013578649, 'IsSystemTable') AS [IsSystemTable];
Výsledek:
+-----------------+ | IsSystemTable | |-----------------| | 0 | +-----------------+
V tomto případě databáze dělá ve skutečnosti mají objekt s tímto ID, ale objekt je ve skutečnosti uživatelsky definovaná tabulka, takže dostanu negativní výsledek.
Zde je to opět pomocí OBJECT_ID()
získat ID z názvu objektu.
SELECT OBJECT_ID('Dimension.City') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsSystemTable') AS [IsSystemTable], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') AS [IsUserTable];
Výsledek:
+-------------+-----------------+---------------+ | Object ID | IsSystemTable | IsUserTable | |-------------+-----------------+---------------| | 1013578649 | 0 | 1 | +-------------+-----------------+---------------+
Také jsem zkontroloval, zda je objekt uživatelsky definovanou tabulkou a výsledek je pozitivní.
Příklad 3 – 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'), 'IsSystemTable') AS [InvalidObject], OBJECTPROPERTY(12345678, 'IsSystemTable') 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.