Eliminar todos los objetos
Este script fulmina todos los objetos de la base de datos actual: tablas, vistas, funciones y procedimientos
almacenados*. Es una alternativa rápida al viejo truco de eliminar la base de datos y volverla a crear y viene
bien durante el desarrollo del proyecto (después ya no tanto). Yo lo ejecuto con SQLCMD pero imagino que no
es la única manera. Debería funcionar con SQL Server 2005 o superior.
(*) Aún estoy aprendiendo Transact-SQL así que mi definición de todo puede ser
incompleta.
Dos detalles importantes sobre el código tal y como está:
- Excluye las tablas que comienzan por «
sys».
- Excluye las funciones que comienzan por «
fn_».
- Excluye los procedimientos almacenados que comienzan por «
sp_».
Es una forma de evitar cepillarnos algunos objetos creados automáticamente por herramientas como SQL Server Management Studio pero obliga a no usar nombres así en nuestras cosas;
ajústese a gusto del consumidor.
DECLARE @spSQL AS NVARCHAR(MAX)
DECLARE @fnSQL AS NVARCHAR(MAX)
DECLARE @vwSQL AS NVARCHAR(MAX)
DECLARE @fkSQL AS NVARCHAR(MAX)
DECLARE @tblSQL AS NVARCHAR(MAX)
SET @spSQL = ''
SET @fnSQL = ''
SET @vwSQL = ''
SET @fkSQL = ''
SET @tblSQL = ''
SELECT @spSQL = @spSQL + 'DROP PROCEDURE ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name)
FROM sys.procedures
WHERE is_ms_shipped = 0
AND name NOT LIKE 'sp\_%' ESCAPE '\'
SELECT @vwSQL = @vwSQL + 'DROP VIEW ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name)
FROM sys.views
WHERE is_ms_shipped = 0
SELECT @fkSQL = @fkSQL + 'ALTER TABLE ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(OBJECT_NAME(parent_object_id)) + ' DROP CONSTRAINT ' + QUOTENAME(name)
FROM sys.foreign_keys
WHERE is_ms_shipped = 0
SELECT @tblSQL = @tblSQL + 'DROP TABLE ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name)
FROM sys.tables
WHERE is_ms_shipped = 0
AND name NOT LIKE 'sys%'
SELECT @fnSQL = @fnSQL + 'DROP FUNCTION ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name)
FROM sys.objects
WHERE is_ms_shipped = 0
AND name NOT LIKE 'fn\_%' ESCAPE '\'
AND type = 'FN'
EXEC (@spSQL)
EXEC (@vwSQL)
EXEC (@fkSQL)
EXEC (@tblSQL)
EXEC (@fnSQL)
GO
Historial
- v2018-03-26
- Evitar errores al eliminar funciones que están en uso.
- v2009-12-10
- Faltaba eliminar las funciones.
- ¡Ahora con comentarios!
- v2009-12-03
- Primera versión.