Si vous devez renvoyer une liste de toutes les contraintes de clé étrangère qui ont été désactivées dans une base de données SQL Server, vous pouvez exécuter le code T-SQL ci-dessous.
Exemple 1 : Renvoyer uniquement les contraintes de clé étrangère désactivées
Cette requête renvoie uniquement les contraintes de clé étrangère désactivées dans la base de données actuelle. Pour cet exemple, je renvoie uniquement le nom de la contrainte, ainsi que son statut désactivé et approuvé.
SELECT name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys WHERE is_disabled = 1;
Résultat :
+------------------------+---------------+------------------+ | Constraint | is_disabled | is_not_trusted | |------------------------+---------------+------------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 1 | +------------------------+---------------+------------------+
Cela interroge le sys.foreign_keys
vue système. Nous savons qu'il ne renvoie que des contraintes désactivées car le WHERE
la clause spécifie uniquement les lignes qui ont le is_disabled
colonne définie sur 1
.
Si vous voulez retourner uniquement activé contraintes de clé étrangère, changez simplement le 1
à 0
.
Notez que le is_not_trusted
flag est également défini sur 1
pour ces contraintes désactivées. En effet, le système ne peut pas garantir que la contrainte a vérifié toutes les données. Cela a du sens, car la désactivation d'une contrainte ouvre la possibilité que des données non valides entrent dans la base de données sans être vérifiées.
Voici à nouveau la même requête, mais cette fois j'inclus la table et la table référencée pour chaque contrainte :
SELECT name AS 'Constraint', OBJECT_NAME(parent_object_id) AS 'Table', OBJECT_NAME(referenced_object_id) AS 'Referenced Table', is_disabled, is_not_trusted FROM sys.foreign_keys WHERE is_disabled = 1;
Résultat :
+------------------------+------------+--------------------+---------------+------------------+ | Constraint | Table | Referenced Table | is_disabled | is_not_trusted | |------------------------+------------+--------------------+---------------+------------------| | FK_BandMember_Band | BandMember | Band | 1 | 1 | | FK_BandMember_Musician | BandMember | Musician | 1 | 1 | +------------------------+------------+--------------------+---------------+------------------+
Exemple 2 - Renvoyer toutes les contraintes de clé étrangère
La requête suivante renvoie tous contraintes de clé étrangère pour la base de données actuelle (pas seulement celles qui sont désactivées) :
SELECT name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys;
Résultat :
+--------------------------------+---------------+------------------+ | Constraint | is_disabled | is_not_trusted | |--------------------------------+---------------+------------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 1 | | FK_MembershipPeriod_BandMember | 0 | 0 | +--------------------------------+---------------+------------------+