Existe-t-il une requête (commande) permettant de tronquer toutes les tables d'une base de données en une seule opération ? Je veux savoir si je peux le faire avec une seule requête.
MS SQL Server 2005+ (Enlever PRINT pour l'exécution réelle...)
EXEC sp_MSforeachtable 'PRINT ''TRUNCATE TABLE ?'''
Si votre plate-forme de base de données prend en charge les vues INFORMATION_SCHEMA, prenez les résultats de la requête suivante et exécutez-les.
SELECT 'TRUNCATE TABLE ' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
Essayez ceci pour MySQL :
SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES
L'ajout d'un point-virgule au Concat le rend plus facile à utiliser, par exemple à partir de mysql workbench.
SELECT Concat('TRUNCATE TABLE ', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES
Si vous utilisez sql server 2005, il existe une procédure stockée cachée qui vous permet d'exécuter une commande ou un ensemble de commandes sur toutes les tables d'une base de données. Voici comment vous pouvez appeler TRUNCATE TABLE
avec cette procédure stockée :
EXEC [sp_MSforeachtable] @command1="TRUNCATE TABLE ?"
[Ici][1] est un bon article qui donne plus de détails.
Pour MySql, cependant, vous pouvez utiliser mysqldump et spécifier les options --add-drop-tables
et --no-data
pour supprimer et créer toutes les tables en ignorant les données. comme ceci :
mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE]
[Guide d'utilisation de mysqldump de dev.mysql][2]
[1] : http://www.databasejournal.com/features/mssql/article.php/3441031/SQL-Server-Undocumented-Stored-Procedures-spMSforeachtable-and-spMSforeachdb.htm [2] : http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html [3] : http://www.thingy-ma-jig.co.uk/blog/10-10-2006/mysql-drop-all-tables
Une idée pourrait être de simplement supprimer et recréer les tables ?
EDIT:
@Jonathan Leffler : Vrai
Autre suggestion (ou au cas où vous n'auriez pas besoin de tronquer TOUTES les tables) :
Pourquoi ne pas simplement créer une procédure stockée de base pour tronquer des tables spécifiques.
CREATE PROCEDURE [dbo].[proc_TruncateTables]
AS
TRUNCATE TABLE Table1
TRUNCATE TABLE Table2
TRUNCATE TABLE Table3
GO