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

Comment les contraintes de clé étrangère peuvent-elles être temporairement désactivées à l'aide de 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 :(l'impression est facultative 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 le trouve utile lors du remplissage des données d'une base de données à l'autre. C'est une bien meilleure approche que de supprimer des contraintes. Comme vous l'avez mentionné, il est pratique de supprimer toutes les données de la base de données et de les repeupler (par exemple dans un environnement de test).

Si vous supprimez toutes les données, cette solution peut vous être utile.

Parfois, il est également pratique de désactiver tous les déclencheurs, vous pouvez voir la solution complète ici.