Vous pouvez utiliser le code ci-dessous pour désactiver tous les CHECK
et contraintes de clé étrangère pour la base de données actuelle dans SQL Server.
EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
Ceci utilise le sp_MSforeachtable
non documenté de Microsoft procédure stockée. Cette procédure vous permet d'effectuer des tâches sur chaque table d'une base de données. C'est donc parfait pour notre tâche ici - pour désactiver tous les CHECK
contraintes dans la base de données actuelle.
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, pour deux tables différentes.
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 :
EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
C'est généralement une bonne idée de s'assurer que vous utilisez la bonne base de données lorsque vous faites ce genre de choses. Nous pourrions donc ajouter au code ci-dessus en basculant explicitement vers la bonne base de données :
USE Test; EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
Dans ce cas, je passe à une base de données appelée Test .
Exemple 3 - Vérifier le résultat
Après avoir exécuté le code ci-dessus, je vais maintenant exécuter 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 | 1 | 1 | +----------------+-----------------+---------------+------------------+
Ainsi, toutes les contraintes de la base de données 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 souhaitez uniquement désactiver les contraintes une par une, consultez Comment désactiver une contrainte CHECK dans SQL Server pour des exemples.