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.