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.