我有一个经常从VisualStudio数据库项目(通过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并开始终止连接,但我需要一种在自动构建中自动完成这项工作的方法.(虽然这一次我的连接是db上唯一一个我试图断开的连接.)

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

推荐答案

Updated

适用于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); 

Sql相关问答推荐

SQL从同一表连接列

SQL—如何在搜索的元素之后和之前获取元素?

出现5次后,将所有正斜杠替换为连字符

在多个柱上连接时,如何确定连接条件?

为什么在postgres中,横向连接比相关子查询快?

一个SQL查询将在需要的地方多次返回同一成员

最近3个月收到的邮箱总数

改进的SQL子字符串提取

两个月之间的WHERE CASE WHEN-ORA-00905:缺少关键字

使用同一个表,为什么IN、NOT IN、NOT EXISTS和EXISTS有不同的输出?

无法访问级联删除导致的触发器中已删除的外键记录

在Postgres,什么是;.USSTZ;在';YYYY-MM-DD;T;HH24:MI:SS.USSTZ';?

STContains、STIntersections和STWithin返回错误的地理结果

当 ansible 变量未定义或为空时,跳过 sql.j2 模板中的 DELETE FROM 查询

匹配 H[0-9][0-9] 但不匹配除字母 H 之外的任何字母

获取上个月和上一年的值

两个具有 NULL 值的表达式结果之间的差异

批量更改WooCommerce中所有产品的税收状态

检索具有相同位置的最小和最大store 数量

如何更改 duckdb R 中的数据约束