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

Comment renvoyer toutes les contraintes CHECK non approuvées dans SQL Server (exemple T-SQL)

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.