V SQL Server můžete použít OBJECTPROPERTY()
funkce pro kontrolu typu objektu. Přesněji řečeno, můžete zkontrolovat, zda se jedná nebo nejedná o konkrétní typ.
Například IsTable
vlastnost vám řekne, zda se jedná o tabulku, IsView
vlastnost vám řekne, zda se jedná o zobrazení atd.
Tento článek nabízí několik základních příkladů, které zkontrolují, zda je objekt tabulkou, zobrazením, uloženou procedurou nebo funkcí s hodnotou tabulky.
Příklad 1 – Kontrola tabulky
Zde je příklad, který kontroluje, zda je objekt tabulkou.
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsTable') AS [IsTable];
Výsledek:
+-----------+ | IsTable | |-----------| | 1 | +-----------+
Zde je název objektu Artists
a schéma je dbo
.
V tomto případě je výsledek 1
, což znamená, že objekt je ve skutečnosti tabulka.
Příklad 2 – Kontrola zobrazení
Zde je příklad, který kontroluje, zda je objekt pohledem.
USE Music; SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsView') AS [IsView];
Výsledek:
+----------+ | IsView | |----------| | 0 | +----------+
V tomto případě kontroluji stejný objekt z předchozího příkladu, takže už víme, že to není pohled. Výsledkem je tedy 0
, což znamená, že se nejedná o zobrazení.
Zde je další příklad, tentokrát je objekt ve skutečnosti pohled:
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.RockAlbums'), 'IsView') AS [IsView];
Výsledek:
+----------+ | IsView | |----------| | 1 | +----------+
Všimněte si, že jsem odstranil USE Music;
část, protože už jsem v té databázi. OBJECTPROPERTY()
kontroluje pouze objekty s rozsahem schématu v aktuální databázi.
Příklad 3 – Podmíněné prohlášení
Můžeme posunout koncept o krok dále a začlenit předchozí příklady do IF
prohlášení. Tímto způsobem můžeme spustit jeden příkaz, abychom zjistili, jaký typ objektu je.
Níže jsou uvedeny základní příklady, které jednoduše vypisují typ objektu.
Tabulka
DECLARE @TheObject varchar(255) = 'dbo.Artists'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
Výsledek:
Table
V tomto případě je objektem tabulka.
Zde je více příkladů, které používají stejný příkaz, ale s různými typy objektů.
Zobrazit
DECLARE @TheObject varchar(255) = 'dbo.RockAlbums'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
Výsledek:
View
Uložená procedura
DECLARE @TheObject varchar(255) = 'dbo.uspGetAlbumsByArtist'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
Výsledek:
Stored Procedure
Funkce s tabulkovou hodnotou
DECLARE @TheObject varchar(255) = 'dbo.ufn_AlbumsByGenre1'; IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1 PRINT 'View'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1 PRINT 'Table'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1 PRINT 'Stored Procedure'; ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1 PRINT 'Table-valued Function'; ELSE PRINT 'Unknown. Maybe add more types to this statement.';
Výsledek:
Table-valued Function
Do příkazu můžete přidat více typů, aby byl užitečnější. Uvedl jsem argumenty, které OBJECTPROPERTY()
přijímá na této stránce. Ne všechny jsou však typy objektů – existuje mnoho různých vlastností, které můžete zkontrolovat.
Úplné vysvětlení každé vlastnosti naleznete v dokumentaci společnosti Microsoft.