Sie können die OBJECTPROPERTY()
verwenden Funktion in SQL Server, um zu prüfen, ob ein Objekt eine benutzerdefinierte Tabelle ist oder nicht.
Übergeben Sie dazu als erstes Argument die Objekt-ID und IsUserTable
als zweites Argument. Die Funktion gibt eine 1
zurück oder eine 0
abhängig davon, ob es sich um eine benutzerdefinierte Tabelle handelt oder nicht.
Ein Rückgabewert von 1
bedeutet, dass es ist eine benutzerdefinierte Tabelle und einen Wert von 0
bedeutet, dass dies nicht der Fall ist.
Beispiel 1 – Grundlegende Verwendung
Hier ist ein kurzes Beispiel zur Veranschaulichung.
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(1013578649, 'IsUserTable') AS [IsUserTable];
Ergebnis:
+---------------+ | IsUserTable | |---------------| | 1 | +---------------+
In diesem Fall die WideWorldImportersDW Die Datenbank hat ein Objekt mit der bereitgestellten ID und ist eine benutzerdefinierte Tabelle.
Beispiel 2 – Abrufen der Objekt-ID
Wenn Sie den Namen des Objekts kennen, aber nicht seine ID, können Sie die OBJECT_ID()
verwenden Funktion zum Abrufen der ID basierend auf ihrem Namen.
Beispiel:
SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') AS [IsUserTable];
Ergebnis:
+---------------+ | IsUserTable | |---------------| | 1 | +---------------+
Dies ist das gleiche Objekt aus dem vorherigen Beispiel.
Hier wird nochmal mit der ID getrennt ausgegeben.
SELECT OBJECT_ID('Dimension.City') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') AS [IsUserTable];
Ergebnis:
+-------------+---------------+ | Object ID | IsUserTable | |-------------+---------------| | 1013578649 | 1 | +-------------+---------------+
Beispiel 3 – Wenn das Objekt KEINE benutzerdefinierte Tabelle ist
Folgendes passiert, wenn das Objekt keine Benutzertabelle ist.
SELECT OBJECTPROPERTY(402100473, 'IsUserTable') AS [IsUserTable];
Ergebnis:
+---------------+ | IsUserTable | |---------------| | 0 | +---------------+
In diesem Fall macht es die Datenbank habe ein Objekt mit dieser ID, aber das Objekt ist eigentlich eine gespeicherte Prozedur (keine benutzerdefinierte Tabelle), also erhalte ich ein negatives Ergebnis.
Hier wird wieder OBJECT_ID()
verwendet .
SELECT OBJECT_ID('Sequences.ReseedAllSequences') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'IsUserTable') AS [IsUserTable], OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'IsProcedure') AS [IsProcedure];
Ergebnis:
+-------------+---------------+---------------+ | Object ID | IsUserTable | IsProcedure | |-------------+---------------+---------------| | 402100473 | 0 | 1 | +-------------+---------------+---------------+
Ich habe auch überprüft, ob das Objekt eine gespeicherte Prozedur ist, und das Ergebnis ist positiv.
Beispiel 4 – 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'), 'IsUserTable') AS [InvalidObject], OBJECTPROPERTY(12345678, 'IsUserTable') 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.