Si vous devez renvoyer une liste de tous les CHECK non approuvés contraintes dans une base de données SQL Server, vous pouvez exécuter le code T-SQL ci-dessous.
Par "non approuvé", je fais référence aux contraintes qui ont leur is_not_trusted drapeau défini sur 1 .
Exemple 1 – Renvoyer uniquement les contraintes CHECK non approuvées
Cette requête renvoie uniquement le CHECK non fiable contraintes dans la base de données courante.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, definition FROM sys.check_constraints WHERE is_not_trusted = 1;
Résultat :
+----------------+-----------------+---------------+-------------------------------+ | Table | Constraint | is_disabled | definition | |----------------+-----------------+---------------+-------------------------------| | ConstraintTest | chkPrice | 0 | ([Price]>(0)) | | ConstraintTest | chkValidEndDate | 1 | ([EndDate]>=[StartDate]) | | Occupation | chkJobTitle | 1 | ([JobTitle]<>'Digital Nomad') | +----------------+-----------------+---------------+-------------------------------+
Cette requête renvoie le nom de la contrainte, le nom de la table à laquelle elle s'applique et la définition de la contrainte.
Il renvoie également le is_disabled colonne. Cela nous indique si la contrainte est actuellement activée ou désactivée. Cela peut être important à savoir, car une contrainte peut être activée mais non approuvée en même temps.
Il interroge le sys.check_constraints vue système. Nous savons qu'il ne renvoie que des contraintes non fiables car le WHERE la clause spécifie uniquement les lignes qui ont le is_not_trusted colonne définie sur 1 .
Si vous voulez retourner tous les éléments de confiance CHECK contraintes, changez simplement le 1 à 0 .
Exemple 2 – Renvoyer le statut de confiance
Le revoici, mais cette fois j'échange la definition colonne avec le is_not_trusted colonne :
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.check_constraints WHERE is_not_trusted = 1;
Résultat :
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Il est probablement superflu d'inclure le is_not_trusted colonne, mais au moins cela aide à réitérer le fait qu'une contrainte activée peut toujours être non approuvée.
Exemple 3 - Renvoyer toutes les contraintes CHECK
La requête suivante renvoie tous CHECK contraintes pour la base de données actuelle (pas seulement celles non approuvées) :
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.check_constraints;
Résultat :
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 1 | | ConstraintTest | chkValidEndDate | 1 | 1 | | ConstraintTest | chkTeamSize | 0 | 0 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Pour une discussion détaillée (et des exemples) du is_not_trusted flag, consultez Ce que vous devez savoir sur WITH NOCHECK lors de l'activation d'une contrainte CHECK dans SQL Server.