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

Verwenden Sie OBJECTPROPERTY(), um herauszufinden, ob eine Tabelle eine Systemtabelle in SQL Server ist

Die OBJECTPROPERTY() Funktion in SQL Server ermöglicht es Ihnen, ein Objekt auf eine bestimmte Eigenschaft zu überprüfen.

Mit dieser Funktion können Sie prüfen, ob es sich bei einem Objekt um eine Systemtabelle handelt oder nicht. Übergeben Sie dazu als erstes Argument die Objekt-ID und IsSystemTable als zweites Argument. Die Funktion gibt eine 1 zurück oder eine 0 je nachdem, ob es sich um eine Systemtabelle handelt oder nicht (1 bedeutet, dass es ist eine Systemtabelle und 0 bedeutet, dass dies nicht der Fall ist).

Beispiel 1 – Grundlegende Verwendung

Hier ist ein kurzes Beispiel zur Veranschaulichung.

SELECT OBJECTPROPERTY(3, 'IsSystemTable') AS [IsSystemTable];

Ergebnis:

+-----------------+
| IsSystemTable   |
|-----------------|
| 1               |
+-----------------+

In diesem Fall ist das Objekt ist eine Systemtabelle.

Beispiel 2 – Objekt ist KEINE Systemtabelle

Folgendes passiert, wenn das Objekt keine Systemtabelle ist.

SELECT OBJECTPROPERTY(1013578649, 'IsSystemTable') AS [IsSystemTable];

Ergebnis:

+-----------------+
| IsSystemTable   |
|-----------------|
| 0               |
+-----------------+

In diesem Fall macht es die Datenbank habe tatsächlich ein Objekt mit dieser ID, aber das Objekt ist eigentlich eine benutzerdefinierte Tabelle, also erhalte ich ein negatives Ergebnis.

Hier wird wieder OBJECT_ID() verwendet um die ID aus dem Namen des Objekts zu erhalten.

SELECT 
  OBJECT_ID('Dimension.City') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsSystemTable') AS [IsSystemTable],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') AS [IsUserTable];

Ergebnis:

+-------------+-----------------+---------------+
| Object ID   | IsSystemTable   | IsUserTable   |
|-------------+-----------------+---------------|
| 1013578649  | 0               | 1             |
+-------------+-----------------+---------------+

Ich habe auch überprüft, ob das Objekt eine benutzerdefinierte Tabelle ist, und das Ergebnis ist positiv.

Beispiel 3 – Objekt existiert nicht

SQL Server geht davon aus, dass sich die Objekt-ID im aktuellen Datenbankkontext befindet. Wenn Sie eine Objekt-ID aus einer anderen Datenbank übergeben, erhalten Sie entweder ein NULL-Ergebnis oder falsche Ergebnisse.

SELECT 
  OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'IsSystemTable') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsSystemTable') AS [12345678];

Ergebnis:

+-----------------+------------+
| InvalidObject   | 12345678   |
|-----------------+------------|
| NULL            | NULL       |
+-----------------+------------+

In diesem Fall enthält die Datenbank keine Objekte mit diesem Namen oder dieser ID, und daher erhalte ich ein NULL-Ergebnis.

Sie erhalten auch NULL bei einem Fehler oder wenn Sie keine Berechtigung zum Anzeigen des Objekts haben.