簡體   English   中英

SQL Server 2008 R2:按條件刪除數據庫

[英]SQL Server 2008 R2 : Drop Database on Condition

現在,我在這里嘗試的是基於任何條件(例如,在IF塊內)從SQL Server刪除數據庫。 如果數據庫存在,請刪除並重新創建。

我正在使用以下代碼:

IF EXISTS (SELECT 1 FROM sys.databases db with(nolock) WHERE db.name = 'practice')
BEGIN
    USE master
    DROP DATABASE practice
END

這段代碼會持續執行幾分鍾,然后回復錯誤消息

消息3702,第16級,狀態4,第1行
無法刪除數據庫“實踐”,因為它當前正在使用中。

然后再嘗試一次,在代碼中使用GO語句來分隔執行流程,並添加以下代碼(注意,該語句也具有創建數據庫的語句):

IF EXISTS (SELECT 1 FROM sys.databases db with(nolock) WHERE db.name = 'practice')
BEGIN
    USE master
    GO

    DROP DATABASE practice
    GO

    CREATE DATABASE practice
END

現在拋出此錯誤:

Msg 102,第15級,狀態1,第3行
'master'附近的語法不正確。
消息3702,第16級,狀態4,第1行
無法刪除數據庫“實踐”,因為它當前正在使用中。
Msg 102,第15級,狀態1,第2行
“ END”附近的語法不正確

我不知道我是否缺少某些東西,或者是否有任何需要解決的方法。

另外,如果有的話,我會希望有更好的替代品來實現此目的。

我不知道這是否可行。

問候,小腿

如錯誤消息所示,數據庫正在使用中。您可以使用以下腳本強制刪除數據庫

 if exists(select * from sys.sysdatabases where name ='test')
    begin
    use master;

    alter database test
    set single_user with rollback immediate;

    drop database test;

    end

您也可以

sp_who2 

查看誰或什么連接到該數據庫。 然后,您可以使用

KILL SPID# (i.e. "KILL 54") 

強制關閉該連接。 如果您正在生產中,但是無論如何都要刪除並重新創建數據庫,這將很危險...

這比@TheGameiswar的建議更具手術效果,但非常相似。

出於練習的目的,可以使用以下代碼:

EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'practice'
GO
USE [master]
GO
ALTER DATABASE [practice] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
DROP DATABASE [practice]
GO

現在您可以創建新的數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM