| 

.NET C# Java Javascript Exception

1
Hallo, ich möchte alle Tabellen, Views, Trigger, etc. einer MSSQL-Datenbank löschen, praktisch also wieder eine jungfräuliche Datenbank haben. Jedoch möglichst ohne die Datenbank selber zu löschen.

Für das reine Entfernen der Tabellen habe ich schon ein Codeschnipsel gefunden:
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'; 
EXEC sp_MSforeachtable @command1 = "DROP TABLE ?";
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL';

Hat da jemand noch eine Idee zu?

Notfalls würde mir auch eine Möglichkeit reichen das Ganze von einem .NET-Programm durchzuführen.
News:
24.03.2011
m.fuchs 1,8k 2 8
4 Antworten
3
Ich hätte auch angenommen dass das zweite Skript (zumindest teilweise) den gewünschten Erfolg bringt. Sieht nicht so aus als könne man damit Views löschen.

Schreib doch einfach eine eigene sp die das erledigt; zwei Cursor reichen
SELECT Name FROM sys.sysobjects WHERE xtype IN ('V') liefert die Views
SELECT Name FROM sys.sysobjects WHERE xtype IN ('U') liefert die Tabellen
(wenn du Prozeduren und Funktionen hast, musst Du schauen was die für einen xType haben)

Ein Drop Table/ View sollte reichen um alle Objekte aus der Db zu löschen.
Als Vorlage kannst Du dir ja auch die sys.sp_MSforeach_worker dort sieht man ganz gut wie Microsoft das für dein Beispiel macht.


CREATE PROC sp_drop_all_tables as

DECLARE tableNameCursor CURSOR FOR SELECT Name FROM sys.sysobjects WHERE xtype IN ('U')
DECLARE @tableName nvarchar(517)

OPEN tableNameCursor

FETCH tableNameCursor into @tableName
WHILE (@@fetch_status >= 0) BEGIN
EXEC('DROP TABLE ' + @tableName)
FETCH tableNameCursor into @tableName
END

DEALLOCATE tableNameCursor

GO
25.03.2011
wurzelchen 289 5
2
Bei großen Datenmengen, wäre es sinnvoll auch die Logdatei zu verkleinern:

BACKUP LOG datenbankame TO DISK='NUL'
DBCC SHRINKFILE(datenbankname_log, 1)
25.03.2011
mblaess 1,2k 1 9
in der Tat!
wurzelchen 25.03.2011
0
Entschuldige aber bin gerade nicht im klaren was du nun genau suchst, oder ich schnall es einfach gerade nicht :)= ein Codesnipped fürs entfernen hast du doch schon?!
24.03.2011
Marco Rieger 820 8
Leider nein. Das Skript löscht zwar den Inhalt aller Tabellen, aber die Tabellen selbst bleiben bestehen. Und es betrifft ja auch noch die Trigger, Views und so weiter.
mf
m.fuchs 24.03.2011
Was meinst du mit die Tabellen bleiben bestehen, DROP TABLE löscht alles aus deiner Tabelle, Trigger , Views etc...die Tabelle selbst mit eingeschlossen?
Marco Rieger 24.03.2011
DROP Table löscht nur die Tabelle. Views und ähnliches bleiben bestehen.

BTW: Bitte nicht Beiträge so editieren, dass der komplette Sinn verändert wird. Das macht es Nachlesende im Verständnis sehr schwer.
m.fuchs 25.03.2011
0
Ich mach hier mal die Ingrid, falls nochmal jemand so etwas braucht. Für das Löschen der Trigger kann man dieses Script nutzen:

declare @cmd varchar(4000)
declare cmds cursor for
Select
'drop trigger [' + NAME + ']'
FROM sys.triggers

open cmds
while 1=1
begin
fetch cmds into @cmd
if @@fetch_status != 0 break
exec(@cmd)
end
close cmds
deallocate cmds


Das Löschen von Views und StoredProcedures funktioniert dann genauso.
25.03.2011
m.fuchs 1,8k 2 8

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH