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.