borrame.com - Colección particular de recortes de código y documentación para programación web

Canales RSS

Lo más fresco

  1. Reemplazar selección con JavaScript Nuevo
  2. ¿Esta IP pertenece a esta red? Modificado
  3. Mozilla Firefox Modificado

Sugerencias del chef

Lo más visitado

  1. Fecha y hora
  2. Dar formato a un número
  3. Rotar logs en Windows
  4. Eliminar formato en Excel
  5. Caché del navegador
Compartir esta página

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. Está probado con SQL Server 2005.

(*) 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á:

  1. Excluye las tablas que comienzan por «sys».
  2. Excluye las funciones que comienzan por «fn_».
  3. 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.

/*
 * Script para SQLCMD - Elimina todos los objetos del usuario actual - v2009-12-10
 */

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 = ''

-- Procedimientos almacenados
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 '\'

-- Funciones
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'

-- Vistas
SELECT @vwSQL = @vwSQL + 'DROP VIEW ' + QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name)
FROM sys.views
WHERE is_ms_shipped = 0

-- Claves foráneas
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

-- Tablas
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%'

EXEC (@spSQL)
EXEC (@fnSQL)
EXEC (@vwSQL)
EXEC (@fkSQL)
EXEC (@tblSQL)
GO

Historial

v2009-12-10
Faltaba eliminar las funciones.
¡Ahora con comentarios!
v2009-12-03
Primera versión.

Esta página ha sido impresa el lunes 21 de mayo de 2012 (03:33:10 +0200) desde http://borrame.com/recortes/sql-server/eliminar-todo.html. La última vez que miré contenía HTML válido con CSS fresquito y si tiene flatas de ortografía ha sido sin querer.

borrame.com es el sitio anteriormente conocido como bits.demogracia.com (no confundir con Demogracia, que sólo pasaba por ahí).

© 2005-2011 by Álvaro G. Vicario (alvaro.es) • Burgos (España) • borrame.com