2010-12-21 8 views

Respuesta

14

Siempre se puede consultar sus vistas de catálogo del sistema y tienen que generar las instrucciones DROP necesarias:

SELECT 'DROP PROCEDURE [' + SCHEMA_NAME(schema_id) + '].[' + pr.NAME +']' 
FROM sys.procedures pr 
WHERE pr.is_ms_shipped = 0 

UNION 

SELECT 'DROP VIEW [' + SCHEMA_NAME(schema_id) + '].[' + v.NAME + ']' 
FROM sys.views v 
WHERE v.is_ms_shipped = 0 

UNION 

SELECT 'ALTER TABLE [' + SCHEMA_NAME(schema_id) + '].[' + OBJECT_NAME(fk.parent_object_ID) + '] DROP CONSTRAINT ' + fk.name 
FROM sys.foreign_keys fk 
WHERE is_ms_shipped = 0 

UNION 

SELECT 'DROP TABLE [' + SCHEMA_NAME(schema_id) + '].[' + t.NAME + ']' 
FROM sys.tables t 
WHERE t.is_ms_shipped = 0 

Esto generará una larga lista de DROP ..... declaraciones, simplemente copia & pegar los en una nueva SSMS ventana y ejecutarlos.

+1

Deberá eliminar todas las restricciones de clave externa antes de eliminar las tablas (ya que se eliminan en orden aleatorio). –

+0

@Klaus Byskov Hoffmann: ¡sí, buen punto! –

+0

Desafortunadamente eso no incluirá nombres de esquema. Esto debería funcionar para las tablas: SELECCIONE 'DROP TABLE' + '[' + SCHEMA_NAME (schema_id) + ']. [' + Name + ']' – Jedidja

11

¿No sería más fácil dejar/recrear la base de datos?

DROP DATABASE yourdbname 
CREATE DATABASE yourdbname 
+0

+1 para SQL-Server drop/recree es rápido. Para las bases de datos de Oracle, uso efectivamente tales scripts ya que toma menos tiempo. –

+3

Excepto si ha creado accidentalmente tablas en la base de datos principal :) Supongo que el póster original podría haber hecho esto, de ahí la pregunta sobre los objetos "que no son del sistema". – Jedidja

Cuestiones relacionadas