2012-09-11 8 views
43

Ich experimentiere und lerne mit Microsoft SQL Server 2008 R2 SP1. Ich habe eine Datenbank, wo ich viele Experimente gemacht habe. Jetzt möchte ich es fallen lassen und neu erstellen. Also extrahiere ich das Erstellungsskript aus der Datenbank, ich lösche es und ich benutze das Skript um es neu zu erstellen. Zu meiner Überraschung sind alle Tische, Schlüssel usw. noch da. Wie lösche ich die Datenbank, damit ich die Datenbank von Grund auf neu erstellen kann?Löschen und Wiederherstellen von Datenbanken in Microsoft SQL Server

Antwort

76
USE master 
IF EXISTS(select * from sys.databases where name='yourDBname') 
DROP DATABASE yourDBname 

CREATE DATABASE yourDBname 
+0

Sie haben Recht, meine Frage war dumm. Tatsächlich wurden die Tabellen, die ich weiterhin sah, in der Master-Datenbank und nicht in meiner Datenbank erstellt. –

+0

Das hat mir sehr geholfen! –

1

ich extrahiere die Erstellung Skript aus der Datenbank

dies die Schaffung Skript für alles, was in der Datenbank extrahiert (Tabellen, Schlüssel usw.). Wenn Sie einfach eine leere Datenbank erstellen möchten, führen Sie einfach CREATE DATABASE <dbname>

22

+1 bis AnandPhadke für seinen Teil des Codes

Dieser Code wird alle aktiven Verbindungen zu der Datenbank schließen und legen Sie es dann

WHILE EXISTS(select NULL from sys.databases where name='YourDBName') 
BEGIN 
    DECLARE @SQL varchar(max) 
    SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';' 
    FROM MASTER..SysProcesses 
    WHERE DBId = DB_ID(N'YourDBName') AND SPId <> @@SPId 
    EXEC(@SQL) 
    DROP DATABASE [YourDBName] 
END 
GO 

CREATE DATABASE YourDBName 
GO 
6

Das mehrfache Eingeben des DBName ist fehleranfällig und wird irgendwann mit inkonsistenten Einträgen und unbeabsichtigten Konsequenzen ausgeführt.

Die Antworten von AnandPhadke oder Pierre mit variabler Unterstützung wären für mich bevorzugt.

DECLARE @DBName varchar(50) = 'YourDatabaseName' 
USE master 
IF EXISTS(select * from sys.databases where name= @DBName) 
EXEC('DROP DATABASE ' + @DBName) 

EXEC('CREATE DATABASE ' + @DBName) 

oder

DECLARE @DBName varchar(50) = 'YourDatabaseName' 
WHILE EXISTS(select NULL from sys.databases where name = @DBName) 
BEGIN 
    DECLARE @SQL varchar(max) 
    SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';' FROM MASTER..SysProcesses WHERE DBId = DB_ID(@DBName) AND SPId <> @@SPId 
    EXEC(@SQL) 
    EXEC('DROP DATABASE ' + @DBName) 
END 
GO 
-1

Dies funktioniert am besten für mich: (?)

if exists (select name from sys.databases where name='YourDBName') 
alter database YourDBName set single_user with rollback immediate 
go 
if exists (select name from sys.databases where name='YourDBName') 
drop database YourDBName 
+0

Das beantwortet die Frage nicht wirklich. Wenn Sie eine andere Frage haben, können Sie sie durch Klicken auf [Frage stellen] (http://stackoverflow.com/questions/ask) stellen. Sie können [Kopfgeld hinzufügen] (http://stackoverflow.com/help/privileges/set-bounties) hinzufügen, um mehr Aufmerksamkeit auf diese Frage zu lenken, sobald Sie genug [Reputation] haben (http://stackoverflow.com/help/). Whats-Reputation). - [Aus Bewertung] (/ review/low-quality-posts/12598382) –

+0

Ich glaube, du hast diese Antwort falsch eingeschätzt, @KhanImranAli. Dieser versucht zu antworten, obwohl schlecht. Dies sollte durch Abstimmung, nicht durch Ausmerzen und negative Überprüfung, moderiert werden. – Palec

+1

Bitte erläutern Sie, was Ihr Code macht und wie er die Frage beantwortet. Wenn Sie ein Code-Snippet als Antwort erhalten, wissen Sie möglicherweise nicht, was Sie damit machen sollen. Antwort sollte dem OP und zukünftigen Besuchern Orientierung geben. Die Idee hinter Ihrem Code ist sehr hilfreich, um das Problem zu verstehen und Ihre Lösung anzuwenden oder zu modifizieren. – Palec

Verwandte Themen