[英]Drop Database SQL Server 2008 R2 Express Edition - Exception
[英]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.