2010-12-21 6 views

Antwort

14

Sie können immer Ihre Systemkatalogsichten abfragen und haben die notwendigen DROP-Anweisungen erzeugen:

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 

Dies wird eine lange Liste von DROP ..... Anweisungen generieren, kopieren Sie einfach & einfügen diejenigen in eine neue SSMS Fenster und führe sie aus.

+1

Sie müssen alle Fremdschlüsseleinschränkungen löschen, bevor Sie die Tabellen löschen (da sie in zufälliger Reihenfolge abgelegt werden). –

+0

@Klaus Byskov Hoffmann: Ja, guter Punkt! –

+0

Leider enthält das keine Schemanamen. Das sollte für Tabellen funktionieren: SELECT 'DROP TABLE' + '[' + SCHEMA_NAME (schema_id) + ']. [' + Name + ']' – Jedidja

11

Wäre es nicht einfacher, die Datenbank zu löschen/wiederherzustellen?

DROP DATABASE yourdbname 
CREATE DATABASE yourdbname 
+0

+1 für SQL-Server drop/recreate ist schnell. Bei Oracle Datenbanken nutze ich solche Skripte, da es weniger Zeit benötigt. –

+3

Außer, wenn Sie versehentlich Tabellen in der Master-Datenbank erstellt haben :) Ich vermute, das Original-Poster könnte dies getan haben, daher die Frage über "Nicht-System" -Objekte. – Jedidja