小编典典

终止与数据库的所有连接的脚本(超过 RESTRICTED_USER ROLLBACK)

all

我有一个开发数据库,​​它经常从 Visual Studio 数据库项目中重新部署(通过 TFS 自动构建)。

有时当我运行我的构建时,我会收到此错误:

ALTER DATABASE failed because a lock could not be placed on database 'MyDB'. Try again later.  
ALTER DATABASE statement failed.  
Cannot drop database "MyDB" because it is currently in use.

我试过这个:

ALTER DATABASE MyDB SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE

但我仍然无法删除数据库。(我的猜测是大多数开发人员都dbo可以访问。)

我可以手动运行SP_WHO并开始终止连接,但我需要一种自动方式在自动构建中执行此操作。(虽然这次我的连接是我试图删除的数据库上唯一的连接。)

是否有一个脚本可以删除我的数据库,无论谁连接?


阅读 81

收藏
2022-05-05

共1个答案

小编典典

更新

对于 MS SQL Server 2012 及更高版本

USE [master];

DECLARE @kill varchar(8000) = '';  
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), session_id) + ';'  
FROM sys.dm_exec_sessions
WHERE database_id  = db_id('MyDB')

EXEC(@kill);

对于 MS SQL Server 2000、2005、2008

USE master;

DECLARE @kill varchar(8000); SET @kill = '';  
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), spid) + ';'  
FROM master..sysprocesses  
WHERE dbid = db_id('MyDB')

EXEC(@kill);
2022-05-05