T-SQL: Eliminar todas las tablas de una base de datos

¿Habéis necesitado alguna vez borrar todas las tablas de una base de datos en SQL Server?. Parece una tarea sencilla, pero si las tablas tienen relaciones entre ellas, reglas de integridad referencial, desencadenadores, etc., la cosa se complica.

Aquí un script con el que se puede hacer:

EXEC sp_MSforeachtable @command1 = "DROP TABLE ?"

sp_MSforeachtable,  es un procedimiento almacenado oculto in SQL Server, el cuál se ejecuta por cada tabla que hay en la base de datos activa. Hay que tener en cuenta que esa operación no se puede deshacer, así que hay que estar seguro de lo que se quiere hacer.

Si hay problemas con el comando anterior es porque seguramente hay reglas de integridad entre las tablas y por eso no las puede borrar. En ese caso lo mejor es hacer mejor lo siguiente:

-- Primero desabilitar la integridad referencial 
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' 
GO

EXEC sp_MSforeachtable @command1 = "DROP TABLE ?"

-- Ahora volver a habilitar la integridad referencial
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL' 
GO

Sql ServerAunque aparentemente volver a habilitar la integridad referencial no tiene sentido, porque la base de datos se queda sin tablas, es recomendable reactivarla para que su funcionamiento sea normal en adelante.

3 comentarios en «T-SQL: Eliminar todas las tablas de una base de datos»

Los comentarios están cerrados.