Si vous devez renvoyer toutes les clés étrangères qui font référence à une table donnée dans SQL Server, essayez l'une des méthodes suivantes.
La première méthode interroge les sys.foreign_keys
vue système. La deuxième méthode exécute le sp_fkeys
procédure stockée système.
Option 1 - sys.foreign_keys
Le code suivant récupère toutes les clés étrangères qui référencent une table donnée, ainsi que les tables de clé primaire et de clé étrangère. J'inclus également le schéma des tables de clés étrangères.
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');
Résultat :
+------------+---------------------------------------+-------------+------------+ | 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 | +------------+---------------------------------------+-------------+------------+
Dans ce cas, j'utilise le WideWorldImportersDW base de données, et je renvoie les clés étrangères qui font référence à Dimension.City
table (la table Dimension.City
table contient la colonne de clé primaire à laquelle les clés étrangères font référence).
Option 2 - sp_fkeys
Une autre façon d'obtenir les clés étrangères qui référencent une table particulière est d'utiliser le sp_fkeys
procédure stockée système. Cette procédure stockée nous offre le choix d'obtenir des clés étrangères en fonction (entre autres) de la table référencée ou de la table de référence.
Dans ce cas, nous souhaitons obtenir les clés étrangères qui référencent une table donnée, nous pouvons donc faire ceci :
EXEC sp_fkeys @pktable_name = 'City', @pktable_owner = 'Dimension';
Résultat (en utilisant la sortie verticale) :
-[ 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
Cela peut facilement être inversé pour rechercher des clés étrangères basées sur la table de clés étrangères en remplaçant simplement les paramètres par @fktable_name
et @fktable_owner
:
EXEC sp_fkeys @fktable_name = 'Order', @fktable_owner = 'Fact';
Une vérification Vrai/Faux
Si vous voulez simplement savoir si une table est référencée ou non par une clé étrangère, mais que vous ne voulez pas que tout soit répertorié, consultez Vérifier si une table est référencée par une clé étrangère dans SQL Server avec OBJECTPROPERTY().
Cet article utilise le TableHasForeignRef
argument de OBJECTPROPERTY()
fonction pour retourner 1
si la table est référencée par une clé étrangère, et 0
si ce n'est pas le cas.