T-SQL: Eliminar todos los registros de todas las tablas de una base de datos SQL Server

SQL ServerEs común que para realizar algunas pruebas sobre Base de Datos hagamos una réplica de la misma y la vaciemos de datos. Por ejemplo pasar los datos de un entorno de pre Producción a Producción.

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 vacías (que en ocasiones no respeta claves ajenas, índices, etc.) o bien ejecutar sentencias TRUNCATE a mano.

Bien, pues me he puesto a investigar un poco y he logrado un script en T-SQL para SQL SERVER  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 restablecer 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 tablas vacías de datos pero respetando su estructura, restricciones, relaciones, vistas, procedimientos almacenados, etc.
Espero que te sea útil! Desde luego a mi me ha ahorrado unas horas de trabajo.

Si quieres más trucos de este tipo te invito a echarle un vistazo a este Nuevo libro de SQL Server 2014 en Español

Comprar en Amazon

SQL Server 2014 | Amazon Kindle

Comprar en Google Play

SQL Server 2014 | Google Play Books

4 comentarios en «T-SQL: Eliminar todos los registros de todas las tablas de una base de datos SQL Server»

    • buenas noches,,,,,ami no corrio, tengo la duda en donde especifico la base de datos a limpiar amigo…muchas gracias

      saludos

Los comentarios están cerrados.