Můžete použít OBJECTPROPERTY()
funkce na serveru SQL Server ke kontrole, zda je objekt uživatelsky definovanou tabulkou či nikoli.
Chcete-li to provést, předejte ID objektu jako první argument a IsUserTable
jako druhý argument. Funkce vrací 1
nebo 0
podle toho, zda se jedná o uživatelsky definovanou tabulku.
Vrácená hodnota 1
znamená, že je uživatelsky definovanou tabulku a hodnotu 0
znamená, že není.
Příklad 1 – Základní použití
Zde je rychlý příklad k demonstraci.
USE WideWorldImportersDW;SELECT OBJECTPROPERTY(1013578649, 'IsUserTable') JAKO [IsUserTable];
Výsledek:
+----------------+| IsUserTable ||---------------|| 1 |+---------------+
V tomto případě WideWorldImportersDW databáze má objekt s poskytnutým ID a je to uživatelsky definovaná tabulka.
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('Dimension.City'), 'IsUserTable') AS [IsUserTable];
Výsledek:
+----------------+| IsUserTable ||---------------|| 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('Dimension.City') AS [ID objektu], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') AS [IsUserTable];
Výsledek:
+-------------+---------------+| ID objektu | IsUserTable ||-------------+---------------|| 1013578649 | 1 |+-------------+---------------+
Příklad 3 – Když objekt NENÍ tabulkou definovanou uživatelem
Co se stane, když objekt není uživatelská tabulka.
SELECT OBJECTPROPERTY(402100473, 'IsUserTable') AS [IsUserTable];
Výsledek:
+----------------+| IsUserTable ||---------------|| 0 |+---------------+
V tomto případě databáze dělá mít objekt s tímto ID, ale objekt je ve skutečnosti uložená procedura (ne uživatelsky definovaná tabulka), takže dostanu negativní výsledek.
Zde je to opět pomocí OBJECT_ID()
.
SELECT OBJECT_ID('Sequences.ReseedAllSequences') AS [ID objektu], OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'IsUserTable') AS [IsUserTable], OBJECTPROPERTY(OBJECT_ID('seequences'Sequences' IsProcedure') AS [IsProcedure];
Výsledek:
+-------------+---------------+---------------+ | ID objektu | IsUserTable | IsProcedure ||-------------+---------------+---------------|| 402100473 | 0 | 1 |+-------------+---------------+---------------+Také jsem zkontroloval, zda je objekt uloženou procedurou, 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'), 'IsUserTable') AS [InvalidObject], OBJECTPROPERTY(12345678, 'IsUserTable') 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.