Sie können die OBJECTPROPERTY()
verwenden Funktion in SQL Server, um zu überprüfen, ob eine Tabelle eine oder mehrere Fremdschlüsseleinschränkungen hat oder nicht.
Übergeben Sie dazu als erstes Argument die Objekt-ID der Tabelle und TableHasForeignKey
als zweites Argument. Die Funktion gibt eine 1
zurück oder eine 0
abhängig davon, ob es eine Fremdschlüsselbeschränkung hat oder nicht.
Ein Rückgabewert von 1
bedeutet, dass die Tabelle tut haben eine Fremdschlüsseleinschränkung und einen Wert von 0
bedeutet das nicht. Ein Rückgabewert von 1
gilt unabhängig davon, wie viele Fremdschlüssel die Tabelle hat (solange sie mindestens einen hat).
Wenn Sie eine tatsächliche Liste der Fremdschlüssel wünschen, lesen Sie Alle Fremdschlüssel in einer Tabelle in SQL Server auflisten.
Beispiel 1 – Grundlegende Verwendung
Hier ist ein kurzes Beispiel zur Veranschaulichung.
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(1493580359, 'TableHasForeignKey') AS [TableHasForeignKey];
Ergebnis:
+----------------------+ | TableHasForeignKey | |----------------------| | 1 | +----------------------+
In diesem Fall die WideWorldImportersDW Die Datenbank hat eine Tabelle mit der bereitgestellten ID und eine Fremdschlüsseleinschränkung.
Beispiel 2 – Abrufen der Objekt-ID
Wenn Sie den Namen der Tabelle kennen, aber nicht ihre ID, können Sie die OBJECT_ID()
verwenden Funktion zum Abrufen der ID basierend auf ihrem Namen.
Beispiel:
SELECT OBJECTPROPERTY(OBJECT_ID('Fact.Order'), 'TableHasForeignKey') AS [TableHasForeignKey];
Ergebnis:
+----------------------+ | TableHasForeignKey | |----------------------| | 1 | +----------------------+
Dies ist das gleiche Objekt aus dem vorherigen Beispiel.
Hier wird nochmal mit der ID getrennt ausgegeben.
SELECT OBJECT_ID('Fact.Order') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Fact.Order'), 'TableHasForeignKey') AS [TableHasForeignKey];
Ergebnis:
+-------------+----------------------+ | Object ID | TableHasForeignKey | |-------------+----------------------| | 1493580359 | 1 | +-------------+----------------------+
Beispiel 3 – Wenn die Tabelle KEINEN Fremdschlüssel hat
Folgendes passiert, wenn die Tabelle keinen Fremdschlüssel hat.
SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignKey') AS [TableHasForeignKey];
Ergebnis:
+----------------------+ | TableHasForeignKey | |----------------------| | 0 | +----------------------+
In diesem Fall ist das Objekt eine Tabelle, es hat nur keinen Fremdschlüssel.
Beispiel 4 – Wenn das Objekt kein Tisch ist
Folgendes passiert, wenn die Datenbank ein Objekt mit der ID enthält, dieses Objekt jedoch keine Tabelle ist.
SELECT OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasForeignKey') AS [TableHasForeignKey];
Ergebnis:
+----------------------+ | TableHasForeignKey | |----------------------| | NULL | +----------------------+
Beispiel 5 – 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'), 'TableHasForeignKey') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasForeignKey') 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.