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

Comment désactiver toutes les contraintes de vérification et de clé étrangère pour une table dans SQL Server (exemples T-SQL)

Vous pouvez utiliser le code ci-dessous pour désactiver tous les CHECK et les contraintes de clé étrangère pour une table spécifique dans SQL Server.

Remplacez simplement TableName avec le nom de la table applicable.

ALTER TABLE TableName NOCHECK CONSTRAINT ALL

Vous trouverez ci-dessous un exemple où je fais cela, puis je vérifie le résultat.

Exemple 1 - Examiner les contraintes

Tout d'abord, je vais jeter un coup d'œil au CHECK actuel et les contraintes de clé étrangère dans la base de données, pour voir si elles sont activées ou désactivées.

SELECT
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  is_disabled, 
  is_not_trusted
FROM sys.foreign_keys
UNION
SELECT 
  OBJECT_NAME(parent_object_id),
  name,
  is_disabled, 
  is_not_trusted
FROM sys.check_constraints;

Résultat :

+----------------+-----------------+---------------+------------------+
| Table          | Constraint      | is_disabled   | is_not_trusted   |
|----------------+-----------------+---------------+------------------|
| ConstraintTest | chkPrice        | 0             | 0                |
| ConstraintTest | chkValidEndDate | 0             | 0                |
| ConstraintTest | chkTeamSize     | 0             | 0                |
| Occupation     | chkJobTitle     | 0             | 0                |
+----------------+-----------------+---------------+------------------+

Il y a donc actuellement quatre CHECK contraintes dans la base de données, dont trois pour le ConstraintTest tableau.

Nous pouvons voir que toutes les contraintes sont activées car is_disabled est défini sur 0 .

Exemple 2 - Désactiver les contraintes

Maintenant, je vais désactiver toutes les contraintes pour le ConstraintTest tableau :

ALTER TABLE ConstraintTest 
NOCHECK CONSTRAINT ALL;

Exemple 3 - Vérifier le résultat

Maintenant, j'exécute la même requête du premier exemple pour voir le résultat.

SELECT
  OBJECT_NAME(parent_object_id) AS 'Table',
  name AS 'Constraint',
  is_disabled, 
  is_not_trusted
FROM sys.foreign_keys
UNION
SELECT 
  OBJECT_NAME(parent_object_id),
  name,
  is_disabled, 
  is_not_trusted
FROM sys.check_constraints;

Résultat :

+----------------+-----------------+---------------+------------------+
| Table          | Constraint      | is_disabled   | is_not_trusted   |
|----------------+-----------------+---------------+------------------|
| ConstraintTest | chkPrice        | 1             | 1                |
| ConstraintTest | chkValidEndDate | 1             | 1                |
| ConstraintTest | chkTeamSize     | 1             | 1                |
| Occupation     | chkJobTitle     | 0             | 0                |
+----------------+-----------------+---------------+------------------+

Comme prévu, les trois contraintes pour le ConstraintTest table ont été désactivées (parce que is_disabled la colonne est définie sur 1 pour ces contraintes).

Notez que le is_not_trusted la colonne est également définie sur 1 . Il s'agit d'une considération importante, surtout si vous avez l'intention de réactiver l'une de vos contraintes désactivées.

Consultez Ce que vous devez savoir sur WITH NOCHECK lors de l'activation d'une contrainte CHECK dans SQL Server pour plus d'informations sur la restauration de la confiance lors de la réactivation de vos contraintes. Les informations contenues dans cet article s'appliquent également aux clés étrangères.

Désactiver les contraintes individuellement

Si vous ne souhaitez pas désactiver toutes les contraintes du tableau, vous pouvez les désactiver individuellement. Voir Comment désactiver une contrainte CHECK dans SQL Server et Comment désactiver une clé étrangère dans SQL Server.

Réactiver les contraintes

Si vous devez réactiver toutes les contraintes pour une table, consultez Comment activer TOUTES les contraintes de vérification et de clé étrangère pour une table.

Si vous devez les réactiver individuellement, consultez Comment activer une contrainte CHECK dans SQL Server et Comment activer une clé étrangère dans SQL Server.