¿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
Aunque 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.