Comment désactiver temporairement les contraintes de clé étrangère en utilisant T-SQL ?
Si vous souhaitez désactiver toutes les contraintes dans la base de données, exécutez simplement ce code :
-- disable all constraints
EXEC sp_MSforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
Pour les réactiver, exécutez : (le print est optionnel bien sûr et ne fait que lister les tables)
-- enable all constraints
exec sp_MSforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
Je trouve cela utile lors du peuplement de données d’une base de données à une autre. C’est une bien meilleure approche que de supprimer les contraintes. Comme vous l’avez mentionné, c’est pratique lors de la suppression de toutes les données dans la base de données et de leur rechargement (par exemple dans un environnement de test).
Si vous supprimez toutes les données, vous pourriez trouver cette solution utile.
Il est aussi parfois pratique de désactiver tous les déclencheurs également, vous pouvez voir la solution complète ici.