sql >> Databáze >  >> RDS >> Sqlserver

Zkontrolujte, zda je objekt tabulkou, zobrazením nebo uloženou procedurou na serveru SQL pomocí funkce OBJECTPROPERTY()

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.


  1. Vícenásobné počty s různými podmínkami v jediném dotazu MySQL

  2. JSON_ARRAY_INSERT() – Vložení hodnot do pole JSON v MySQL

  3. PostgreSQL drop omezení s neznámým názvem

  4. Jak zvládnu otevření/zavření připojení Db v aplikaci Go?