Es 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

