Lorsque vous traitez avec la suppression de données à partir des tables qui ont des relations de clé étrangère - qui est essentiellement le cas avec n'importe quel bien conçu la base de données, nous pouvons désactiver toutes les contraintes, de supprimer toutes les données, puis de les ré-activer les contraintes
-- disable all constraints
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
-- delete data in all tables
EXEC sp_MSForEachTable "DELETE FROM ?"
-- enable all constraints
exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
Plus sur la désactivation des contraintes et des déclencheurs ici
si certains tableaux ont des colonnes d'identité nous voulons réamorçage eux
EXEC sp_MSforeachtable "DBCC CHECKIDENT ( '?', RESEED, 0)"
Notez que le comportement de RESEED diffère d'une marque nouvelle table, et qui avait eu quelques données insérées précédemment à partir de BOL:
DBCC CHECKIDENT ("table_name", RESEED, newReseedValue)
L'identité actuelle de la valeur est définie sur
le newReseedValue. Si aucune ligne n'a
été insérée dans la table car il
a été créé, la première ligne insérée
après l'exécution de DBCC CHECKIDENT va
utilisation newReseedValue que l'identité.
Sinon, la ligne suivante insérée
utilisation newReseedValue + 1. Si la valeur
de newReseedValue est inférieure à la
valeur maximale de la colonne d'identité,
message d'erreur 2627 sera généré
sur les références ultérieures à la table.
Merci à Robert pour souligner le fait que la désactivation des contraintes ne permettent pas d'utiliser truncate, les contraintes devrait être supprimée, puis recréé