Wenn Sie alle Fremdschlüssel zurückgeben müssen, die auf eine bestimmte Tabelle in SQL Server verweisen, versuchen Sie eine der folgenden Methoden.
Die erste Methode fragt die sys.foreign_keys
ab Systemansicht. Die zweite Methode führt die sp_fkeys
aus gespeicherte Systemprozedur.
Option 1 – sys.foreign_keys
Der folgende Code ruft alle Fremdschlüssel ab, die auf eine bestimmte Tabelle verweisen, zusammen mit den Primärschlüssel- und Fremdschlüsseltabellen. Ich füge auch das Schema für die Fremdschlüsseltabellen hinzu.
USE WideWorldImportersDW; SELECT OBJECT_NAME(referenced_object_id) AS [PK Table], name AS [Foreign Key], SCHEMA_NAME(schema_id) AS [FK Schema], OBJECT_NAME(parent_object_id) AS [FK Table] FROM sys.foreign_keys WHERE referenced_object_id = OBJECT_ID('Dimension.City');
Ergebnis:
+------------+---------------------------------------+-------------+------------+ | PK Table | Foreign Key | FK Schema | FK Table | |------------+---------------------------------------+-------------+------------| | City | FK_Fact_Order_City_Key_Dimension_City | Fact | Order | | City | FK_Fact_Sale_City_Key_Dimension_City | Fact | Sale | +------------+---------------------------------------+-------------+------------+
In diesem Fall verwende ich die WideWorldImportersDW Datenbank, und ich gebe die Fremdschlüssel zurück, die auf Dimension.City
verweisen Tabelle (die Dimension.City
Tabelle enthält die Primärschlüsselspalte, auf die die Fremdschlüssel verweisen).
Option 2 – sp_fkeys
Eine andere Möglichkeit, die Fremdschlüssel zu erhalten, die auf eine bestimmte Tabelle verweisen, ist die Verwendung von sp_fkeys
System gespeicherte Prozedur. Diese gespeicherte Prozedur bietet uns die Wahl, Fremdschlüssel (unter anderem) basierend auf der referenzierten Tabelle oder der referenzierenden Tabelle zu erhalten.
In diesem Fall sind wir daran interessiert, die Fremdschlüssel zu erhalten, die auf eine bestimmte Tabelle verweisen, also können wir Folgendes tun:
EXEC sp_fkeys @pktable_name = 'City', @pktable_owner = 'Dimension';
Ergebnis (bei vertikaler Ausgabe):
-[ RECORD 1 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDW PKTABLE_OWNER | Dimension PKTABLE_NAME | City PKCOLUMN_NAME | City Key FKTABLE_QUALIFIER | WideWorldImportersDW FKTABLE_OWNER | Fact FKTABLE_NAME | Order FKCOLUMN_NAME | City Key KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Fact_Order_City_Key_Dimension_City PK_NAME | PK_Dimension_City DEFERRABILITY | 7 -[ RECORD 2 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDW PKTABLE_OWNER | Dimension PKTABLE_NAME | City PKCOLUMN_NAME | City Key FKTABLE_QUALIFIER | WideWorldImportersDW FKTABLE_OWNER | Fact FKTABLE_NAME | Sale FKCOLUMN_NAME | City Key KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Fact_Sale_City_Key_Dimension_City PK_NAME | PK_Dimension_City DEFERRABILITY | 7
Dies kann leicht umgeschaltet werden, um anhand der Fremdschlüsseltabelle nach Fremdschlüsseln zu suchen, indem Sie einfach die Parameter durch @fktable_name
ersetzen und @fktable_owner
:
EXEC sp_fkeys @fktable_name = 'Order', @fktable_owner = 'Fact';
Ein Wahr/Falsch-Check
Wenn Sie nur wissen möchten, ob eine Tabelle von einem Fremdschlüssel referenziert wird oder nicht, aber nicht alles aufgelistet haben möchten, lesen Sie Überprüfen, ob eine Tabelle von einem Fremdschlüssel in SQL Server mit OBJECTPROPERTY() referenziert wird.
Dieser Artikel verwendet die TableHasForeignRef
Argument von OBJECTPROPERTY()
Funktion, um 1
zurückzugeben wenn die Tabelle von einem Fremdschlüssel referenziert wird, und 0
wenn nicht.