Existe uma consulta (comando) para truncar todas as tabelas de uma base de dados em uma única operação? Quero saber se posso fazer isso com uma única consulta.
MS SQL Server 2005+ (Remover PRINT para execução real...)
EXEC sp_MSforeachtable 'PRINT ''TRUNCATE TABLE ?'''
Se a sua plataforma de base de dados suporta as visualizações INFORMATION_SCHEMA, pegue os resultados da seguinte consulta e execute-os.
SELECT 'TRUNCATE TABLE ' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
Tente isto para o MySQL:
SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES
Adicionar um ponto-e-vírgula ao Concat facilita o uso, por exemplo, de dentro do mysql workbench.
SELECT Concat('TRUNCATE TABLE ', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES
se utilizar o servidor sql 2005, existe um procedimento de armazenamento oculto que lhe permite executar um comando ou um conjunto de comandos contra todas as tabelas dentro de uma base de dados. Aqui é como você chamaria TRUNCATE TABLE
com este procedimento armazenado:
EXEC [sp_MSforeachtable] @command1="TRUNCATE TABLE ?"
Aqui é um bom artigo que elabora mais.
Para o MySql, entretanto, você poderia usar o mysqldump e especificar as opções --add-drop-tables' e
--no-data' para soltar e criar todas as tabelas ignorando os dados:
mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE]
Uma ideia poderia ser simplesmente largar e recriar as mesas?
EDIT:
@Jonathan Leffler: Verdade
**Outra sugestão*** (ou caso não precise de truncar TODAS as tabelas):
Porque não criar apenas um procedimento básico de armazenamento para truncar tabelas específicas
CREATE PROCEDURE [dbo].[proc_TruncateTables]
AS
TRUNCATE TABLE Table1
TRUNCATE TABLE Table2
TRUNCATE TABLE Table3
GO