我有一个开发数据库,它经常从 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可以访问。)
dbo
我可以手动运行SP_WHO并开始终止连接,但我需要一种自动方式在自动构建中执行此操作。(虽然这次我的连接是我试图删除的数据库上唯一的连接。)
SP_WHO
是否有一个脚本可以删除我的数据库,无论谁连接?
更新
对于 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);