2012-09-11 60 views
43

我正在試驗和學習Microsoft SQL Server 2008 R2 SP1。 我有一個數據庫,我做了很多實驗。現在我想放棄並重新創建它。 因此,我從數據庫中提取創建腳本,將其刪除,然後使用腳本重新創建它。 令我驚訝的是,所有的桌子,鑰匙等都還在那裏。 如何刪除數據庫,以便我可以從頭重建數據庫?在Microsoft SQL Server中刪除和重新創建數據庫

回答

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

CREATE DATABASE yourDBname 
+0

你說得對,我的問題很蠢。 事實上,我繼續看到的表格實際上是在master數據庫中創建的,而不是在我的數據庫中創建的。 –

+0

這幫了我很多! –

1

我從數據庫

提取創建腳本該提取創建腳本數據庫中的一切(表,鑰匙等)。如果你只是想創建一個空數據庫,只需運行CREATE DATABASE <dbname>

22

+1到AnandPhadke爲他的部分代碼

該代碼將關閉所有活動連接到數據庫,然後把它

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

要求多次輸入DBName容易出錯,在某些情況下,它將以不一致的條目和意想不到的結果執行。

從AnandPhadke或皮埃爾的可變支持的答案將是我的首選。

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

EXEC('CREATE DATABASE ' + @DBName) 

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

這個最適合我:(?)

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

這並沒有真正回答這個問題。如果您有不同的問題,可以通過單擊[提問](http://stackoverflow.com/questions/ask)來提問。您還可以[添加賞金](http://stackoverflow.com/help/privileges/set-bounties)在您擁有足夠的[聲譽](http://stackoverflow.com/help/)時吸引更多人關注此問題什麼聲譽)。 - [來自評論](/ review/low-quality-posts/12598382) –

+0

我相信你誤解了這個答案,@KhanImranAli。這一個試圖回答,雖然很差。這應該通過投票來緩和,而不是通過舉報和負面評論。 – Palec

+1

請說明您的代碼的作用以及它如何回答問題。如果你得到一個代碼片段作爲答案,你可能不知道如何處理它。回答應該給OP和未來的訪客指導。指出你的代碼背後的想法,對於理解這個問題以及應用或修改你的解決方案有很大的幫助。 – Palec

相關問題