218 votes

Comment vous tronquez toutes les tables dans une base de données à l’aide de TSQL ?

J’ai un environnement de test pour une base de données que je veux recharger avec de nouvelles données au début d’un cycle de test. Je ne suis pas intéressé à la reconstruction de la base de données entière-tout simplement « re-création » les données.

Quelle est la meilleure façon de supprimer toutes les données de toutes les tables à l’aide de TSQL ? Existe-t-il des procédures stockées système, vues, etc. qui peuvent être utilisés ? Je ne veux pas manuellement créer et maintenir les déclarations de truncate table pour chaque table-j’aurais préféré qu’elle soit dynamique.

440voto

kristof Points 18322

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éé

197voto

Gulzar Nazim Points 35342

Pour SQL 2005,

Couple plus de liens pour 2000 et 2005/2008...

65voto

Chris KL Points 2418

Voici le roi papa de base de données, scripts d’essuyage. Il efface toutes les tables et les réensemencer correctement :

Profitez, mais soyez prudent !

49voto

Juann Strauss Points 1677

La façon la plus simple de le faire est de

  1. ouvrez SQL server Management Studio
  2. accédez à votre base de données
  3. Cliquez-droit et sélectionnez Tâches->Générer des Scripts (pic 1)
  4. Sur la page "choisissez des Objets" de l'écran, sélectionnez l'option "sélectionner les objets spécifiques" et cochez la case "tables" (pic 2)
  5. sur l'écran suivant, sélectionnez "avancé", puis changer le "Script de suppression et de création" option "Script de suppression et de création" (pic 3)
  6. Choisissez d'enregistrer le script à une nouvelle fenêtre de l'éditeur ou d'un fichier et de l'exécuter en tant que de besoin.

cela vous donnera un script qui tombe et recrée tous vos tables sans avoir à vous soucier de débogage ou si vous avez tout inclus. Bien que ce est plus que juste un tronquée, les résultats sont les mêmes. Il suffit de garder à l'esprit que votre auto-incrémentation des clés primaires va commencer à 0, par opposition aux tables tronquées qui se souviendra de la dernière valeur affectée. Vous pouvez également exécuter ce code si vous n'avez pas accès à la Gestion de studio sur votre PreProd ou des environnements de Production.

1.

enter image description here

2.

enter image description here

3.

enter image description here

13voto

marcj Points 839

Tronquer toutes les tables ne fonctionnera que si vous n'avez pas de relations de clé étrangère entre vos tables, comme SQL Server ne vous permettra pas de tronquer une table avec une clé étrangère.

Une alternative à cela est de déterminer les tables avec des clés étrangères et de supprimer à partir de ces premiers, vous pouvez tronquer les tables sans les clés étrangères par la suite.

Voir http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=65341 et http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=72957 pour plus de détails.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X