Eliminar contenido de todas las tablas de una Base de Datos SQL SERVER
Es común que para realizar algunas pruebas sobre Base de Datos hagamos una réplica de la misma y la vaciemos de datos.
El problema viene cuando tenemos una base de datos pesada, con muchas tablas y datos, y nos toca o bien lanzar un script de creación de tablas vacias (que en ocasiones no respeta claves ajenas, indices, etc...) o bien hacer truncates a mano.
Bien, pues me he puesto a investigar y... bualá! Un script en TSQL para SQL SERVER 2005 que recorre las tablas de una base de datos, elimina las restricciones (para que no falle al borrar datos de una tabla relacionada con otra), hace un truncate de la tabla y vuelve a reestablecer las restricciones tal cual estaban.
-
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
-
GO
-
EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
-
GO
-
-
EXEC sp_MSForEachTable
-
'BEGIN TRY
-
TRUNCATE TABLE ?
-
END TRY
-
BEGIN CATCH
-
DELETE FROM ?
-
END CATCH;'
-
-
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
-
GO
-
EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
-
GO
De este modo tendríamos la tabla vacia de datos pero respetando su estructura, restricciones, relaciones, vistas, procedimientos almacenados... etc
Espero que os sea útil! Desde luego a mi me ha ahorrado unas horitas de trabajo
¡Saludos!



Excelente Script!!! Muchas Gracias.
Es Muy util.
Pues no funciona en todos los casos..
DELETE failed because the following SET options have incorrect settings: ‘QUOTED_IDENTIFIER’. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or query notifications and/or xml data type methods.
Tengan cuidado cuendo lo ejecuten….
Me gusta mejor esto, esta mas controlado, ojala les sirva de algo
SELECT TABLE_NAME
INTO #TEMP_TABLE
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = ‘BASE TABLE’
AND TABLE_CATALOG=’IAASA-BD’ 0
BEGIN
SELECT TOP 1 @NombreTabla = TABLE_NAME FROM #TEMP_TABLE
EXEC (‘DELETE ‘ + @NombreTabla)
DELETE #TEMP_TABLE WHERE TABLE_NAME = @NombreTabla
END
PRINT ‘Proceso de borrado completado…’;
DROP TABLE #TEMP_TABLE
Ojo no se subieron todas las lineas, este debe de estar completo
SELECT TABLE_NAME
INTO #TEMP_TABLE
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = ‘BASE TABLE’
AND TABLE_CATALOG=’IAASA-BD’
DECLARE @NombreTabla NVARCHAR(30)
WHILE (SELECT Count(*) FROM #TEMP_TABLE) > 0
BEGIN
SELECT TOP 1 @NombreTabla = TABLE_NAME FROM #TEMP_TABLE
EXEC (‘DELETE ‘ + @NombreTabla)
DELETE #TEMP_TABLE WHERE TABLE_NAME = @NombreTabla
END
PRINT ‘Proceso de borrado completado…’;
DROP TABLE #TEMP_TABLE