首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何终止与SQL Server2005数据库的所有当前连接?

如何终止与SQL Server2005数据库的所有当前连接?
EN

Stack Overflow用户
提问于 2008-08-14 19:54:25
回答 15查看 431.2K关注 0票数 290

我想要重命名一个数据库,但一直收到“无法获得数据库独占锁”的错误,这意味着仍有一些连接处于活动状态。

如何删除数据库的所有连接,以便重命名数据库?

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2008-08-14 19:56:57

Adam suggested方法不起作用的原因是,在您循环活动连接的过程中,可能会建立新的连接,而您会错过这些连接。您可以改用以下方法,该方法没有此缺点:

代码语言:javascript
复制
-- set your current connection to use master otherwise you might get an error

use master
ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

--do you stuff here 

ALTER DATABASE YourDatabase SET MULTI_USER
票数 382
EN

Stack Overflow用户

发布于 2008-08-14 19:57:15

要完成此操作,请将'DB_NAME‘替换为要终止所有连接的数据库:

代码语言:javascript
复制
USE master
GO

SET NOCOUNT ON
DECLARE @DBName varchar(50)
DECLARE @spidstr varchar(8000)
DECLARE @ConnKilled smallint
SET @ConnKilled=0
SET @spidstr = ''

Set @DBName = 'DB_NAME'
IF db_id(@DBName) < 4
BEGIN
PRINT 'Connections to system databases cannot be killed'
RETURN
END
SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; '
FROM master..sysprocesses WHERE dbid=db_id(@DBName)

IF LEN(@spidstr) > 0
BEGIN
EXEC(@spidstr)
SELECT @ConnKilled = COUNT(1)
FROM master..sysprocesses WHERE dbid=db_id(@DBName)
END
票数 111
EN

Stack Overflow用户

发布于 2010-05-12 18:40:37

杀了它,用火烧死它:

代码语言:javascript
复制
USE master
go

DECLARE @dbname sysname
SET @dbname = 'yourdbname'

DECLARE @spid int
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname)
WHILE @spid IS NOT NULL
BEGIN
EXECUTE ('KILL ' + @spid)
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) AND spid > @spid
END
票数 55
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档