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.

SQL:
  1. EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
  2. GO
  3. EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
  4. GO
  5.  
  6. EXEC sp_MSForEachTable
  7. 'BEGIN TRY
  8. TRUNCATE TABLE ?
  9. END TRY
  10. BEGIN CATCH
  11. DELETE FROM ?
  12. END CATCH;'
  13.  
  14. EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
  15. GO
  16. EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
  17. 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!

4 comentarios

(Required)
(Required, will not be published)

Comment spam protected by SpamBam