Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Überprüfen Sie, ob ein Objekt eine Tabelle, Ansicht oder gespeicherte Prozedur in SQL Server ist, indem Sie die OBJECTPROPERTY()-Funktion verwenden

In SQL Server können Sie das OBJECTPROPERTY() verwenden Funktion, um den Typ eines Objekts zu überprüfen. Genauer gesagt können Sie überprüfen, ob es sich um einen bestimmten Typ handelt oder nicht.

Zum Beispiel IsTable Die Eigenschaft IsView sagt Ihnen, ob es sich um eine Tabelle handelt oder nicht Eigenschaft sagt Ihnen, ob es sich um eine Ansicht handelt usw.

Dieser Artikel bietet einige grundlegende Beispiele, die prüfen, ob ein Objekt eine Tabelle, eine Ansicht, eine gespeicherte Prozedur oder eine Tabellenwertfunktion ist.

Beispiel 1 – Auf Tabelle prüfen

Hier ist ein Beispiel, das prüft, ob ein Objekt eine Tabelle ist.

USE Music; 
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsTable') AS [IsTable];

Ergebnis:

+-----------+
| IsTable   |
|-----------|
| 1         |
+-----------+

Hier lautet der Objektname Artists und das Schema ist dbo .

In diesem Fall ist das Ergebnis 1 , was darauf hinweist, dass das Objekt tatsächlich eine Tabelle ist.

Beispiel 2 – Auf Ansicht prüfen

Hier ist ein Beispiel, das prüft, ob ein Objekt eine Ansicht ist.

USE Music; 
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsView') AS [IsView];

Ergebnis:

+----------+
| IsView   |
|----------|
| 0        |
+----------+

In diesem Fall überprüfe ich dasselbe Objekt wie im vorherigen Beispiel, und wir wissen daher bereits, dass es sich nicht um eine Ansicht handelt. Daher ist das Ergebnis 0 , was darauf hinweist, dass es sich nicht um eine Ansicht handelt.

Hier ist ein weiteres Beispiel, dieses Mal ist das Objekt tatsächlich eine Ansicht:

SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.RockAlbums'), 'IsView') AS [IsView];

Ergebnis:

+----------+
| IsView   |
|----------|
| 1        |
+----------+

Beachten Sie, dass ich USE Music; entfernt habe Teil, weil ich mich bereits in dieser Datenbank befinde. Die OBJECTPROPERTY() prüft nur schemabezogene Objekte in der aktuellen Datenbank.

Beispiel 3 – Bedingte Anweisung

Wir können das Konzept noch einen Schritt weiterführen und die vorherigen Beispiele in ein IF einbauen Erklärung. Auf diese Weise können wir eine einzelne Anweisung ausführen, um herauszufinden, welcher Typ das Objekt ist.

Nachfolgend finden Sie grundlegende Beispiele, die einfach den Objekttyp ausgeben.

Tabelle

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.';

Ergebnis:

Table

In diesem Fall ist das Objekt eine Tabelle.

Hier sind weitere Beispiele, die dieselbe Anweisung verwenden, aber mit unterschiedlichen Objekttypen.

Anzeigen

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.';

Ergebnis:

View

Gespeicherte Prozedur

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.';

Ergebnis:

Stored Procedure

Tabellenwertfunktion

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.';

Ergebnis:

Table-valued Function

Sie können der Anweisung weitere Typen hinzufügen, um sie nützlicher zu machen. Ich habe die Argumente aufgelistet, die OBJECTPROPERTY() akzeptiert auf dieser Seite. Nicht alle davon sind jedoch Objekttypen – es gibt viele verschiedene Eigenschaften, die Sie überprüfen können.

Eine vollständige Erklärung jeder Eigenschaft finden Sie in der Microsoft-Dokumentation.