2012-09-11 10 views
43

Sto sperimentando e imparando con Microsoft SQL Server 2008 R2 SP1. Ho un database in cui ho fatto molti esperimenti. Ora mi piacerebbe rilasciarlo e ricrearlo. Così estraggo lo script di creazione dal database, lo elimino e uso lo script per ricrearlo. Con mia sorpresa, tutti i tavoli, le chiavi ecc. Sono ancora lì. Come posso eliminare il database, in modo da poter ricostruire il database da zero?Eliminare e ricreare i database in Microsoft SQL Server

risposta

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

CREATE DATABASE yourDBname 
+0

Hai ragione, la mia domanda era stupida. Infatti, le tabelle che continuavo a vedere erano effettivamente create nel database master, piuttosto che nel mio database. –

+0

Questo mi ha aiutato molto! –

1

ho estrarre lo script di creazione dal database

questo estratto lo script di creazione per tutto nel database (tabelle, chiavi ecc). Se si vuole semplicemente creare un database vuoto, basta eseguire CREATE DATABASE <dbname>

22

+1 per AnandPhadke per parte del codice sua

Questo codice si chiuderà tutte le connessioni attive al database e poi cadere

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

Richiedere che il DBName venga digitato più di una volta è soggetto ad errori, ad un certo punto verrà eseguito con voci incoerenti e conseguenze indesiderate.

Le risposte di AnandPhadke o di Pierre con supporto variabile sarebbero preferite per me.

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

EXEC('CREATE DATABASE ' + @DBName) 

o

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

Questo funziona meglio per me: (?)

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

Questo in realtà non risponde alla domanda. Se hai una domanda diversa, puoi richiederla facendo clic su [Invia domanda] (http://stackoverflow.com/questions/ask). Puoi anche [aggiungere una taglia] (http://stackoverflow.com/help/privileges/set-bounties) per attirare maggiormente l'attenzione su questa domanda una volta che hai abbastanza [reputazione] (http://stackoverflow.com/help/ che cosa è-la reputazione). - [Dalla recensione] (/ recensione/post di bassa qualità/12598382) –

+0

Credo che abbiate giudicato male questa risposta, @KhanImranAli. Questo cerca di rispondere, anche se male. Questo dovrebbe essere moderato dal voto, non dalla segnalazione e dalla recensione negativa. – Palec

+1

Si prega di includere la spiegazione di cosa fa il codice e come risponde alla domanda. Se ottieni uno snippet di codice come risposta, potresti non sapere cosa farne. La risposta dovrebbe dare all'OP e ai futuri visitatori una guida. Sottolineando l'idea alla base del tuo codice, è di grande aiuto per comprendere il problema e applicare o modificare la tua soluzione. – Palec

Problemi correlati