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.