Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment renvoyer toutes les contraintes de clé étrangère désactivées dans SQL Server (exemple T-SQL)

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                |
+--------------------------------+---------------+------------------+