La procédure stockée système sp_msforeachtable permet d’exécuter un script sur toutes les tables d’une base de données. Le nom de la table correspond au point d’interrogation. Typiquement, si l’on souhaite désactiver les contraintes sur toutes les tables d’une base de données, on pourra procéder ainsi :
1 2 3 4 5 |
-- Désactiver toutes les contraintes d'une table EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all' -- Activer toutes les contraintes d'une table EXEC sp_msforeachtable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all' |
NB : La désactivation des contraintes de clé étrangères suffit pour insérer ou supprimer librement des données dans une table mais elle ne permet pas de procéder à un TRUNCATE. Pour se faire, il est nécessaire de supprimer la contrainte FK :
https://www.concatskills.com/2017/04/19/scripter-creation-suppression-contraintes-fk/
Autre exemple, pour désactiver et activer les triggers en masse on pourra là encore utiliser la procédure stockée système sp_msforeachtable :
1 2 3 4 5 |
-- Désactiver tous les triggers d'une table EXEC sp_msforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL' -- Activer tous les triggers d'une table EXEC sp_msforeachtable 'ALTER TABLE ? ENABLE TRIGGER ALL' |
On peut bien évidemment faire des choses beaucoup plus évoluées mais j’ai préféré des exemples simples pour illustrer mon propos, sans compter qu’ils répondent à des besoins très répandus.