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

Überprüfen Sie mit OBJECTPROPERTY(), ob eine Tabelle von einem Fremdschlüssel in SQL Server referenziert wird

Sie können die OBJECTPROPERTY() verwenden Funktion in SQL Server, um zu prüfen, ob eine Tabelle von einem Fremdschlüssel referenziert wird oder nicht.

Übergeben Sie dazu als erstes Argument die Objekt-ID der Tabelle und TableHasForeignRef als zweites Argument. Die Funktion gibt eine 1 zurück oder eine 0 abhängig davon, ob es durch einen Fremdschlüssel referenziert wird oder nicht.

Ein Rückgabewert von 1 bedeutet, dass die Tabelle ist auf die durch einen Fremdschlüssel verwiesen wird, und einen Wert von 0 bedeutet, dass dies nicht der Fall ist.

Beachten Sie, dass die hier vorgestellten Beispiele die Fremdschlüssel oder ihre Tabellen oder ähnliches nicht auflisten. Sie geben einfach einen Wahr/Falsch-Wert zurück, mit dem Sie testen können, ob eine Tabelle von einem Fremdschlüssel referenziert wird oder nicht. Wenn Sie alle Fremdschlüssel auflisten müssen, die auf eine bestimmte Tabelle verweisen, finden Sie weitere Informationen unter Zurückgeben aller Fremdschlüssel, die auf eine bestimmte Tabelle in SQL Server verweisen. Die Beispiele in diesem Artikel listen jeden Fremdschlüssel sowie die Fremdschlüsseltabelle(n) und die Primärschlüsseltabelle auf.

Beispiel 1 – Grundlegende Verwendung

Hier ist ein kurzes Beispiel zur Veranschaulichung.

USE WideWorldImportersDW;
SELECT OBJECTPROPERTY(1141579105, 'TableHasForeignRef') AS [TableHasForeignRef];

Ergebnis:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 1                    |
+----------------------+

In diesem Fall die WideWorldImportersDW Die Datenbank hat eine Tabelle mit der bereitgestellten ID und wird von einem Fremdschlüssel referenziert.

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('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];

Ergebnis:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 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'), 'TableHasForeignRef') AS [TableHasForeignRef];

Ergebnis:

+-------------+----------------------+
| Object ID   | TableHasForeignRef   |
|-------------+----------------------|
| 1013578649  | 1                    |
+-------------+----------------------+

Beispiel 3 – Wenn die Tabelle NICHT von einem Fremdschlüssel referenziert wird

Folgendes passiert, wenn auf die Tabelle nicht durch einen Fremdschlüssel verwiesen wird.

SELECT OBJECTPROPERTY(OBJECT_ID('Integration.Lineage'), 'TableHasForeignRef') AS [TableHasForeignRef];

Ergebnis:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 0                    |
+----------------------+

In diesem Fall ist das Objekt eine Tabelle, es wird nur nicht durch einen Fremdschlüssel darauf verwiesen.

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'), 'TableHasForeignRef') AS [TableHasForeignRef];

Ergebnis:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 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'), 'TableHasForeignRef') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'TableHasForeignRef') 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.