SQL Server 中断开连接到指定数据库的所有连接

浏览: 3018

开篇介绍

常用的情形是在部署测试数据库时需要通过SQL代码自动重新创建数据库,在删除的时候往往会发生错误,错误信息一般会指出目前有用户连接到这个数据库上,因此不能删除。

实现的方式

通过查询指定数据库中活跃的 SPID,然后一一删除。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

USE MASTER
GO

IF OBJECT_ID('dbo.USP_KillSPID','P')IS NOT NULL
DROP PROCEDURE dbo.USP_KillSPID
GO

CREATE PROCEDURE dbo.USP_KillSPID
@DatabaseName VARCHAR(255)
AS

DECLARE @SPID NVARCHAR(255)
DECLARE curDBLogin CURSOR FOR
SELECT CAST(SPID AS VARCHAR(255)) AS SPID
FROM MASTER..sysprocesses
WHERE dbid = DB_ID(@DatabaseName)

OPEN curDBLogin
FETCH NEXT FROM curDBLogin INTO @SPID

WHILE @@FETCH_STATUS = 0
BEGIN
IF @SPID <> @@SPID
EXEC('KILL '+ @SPID )
FETCH NEXT FROM curDBLogin INTO @SPID
END

CLOSE curDBLogin
DEALLOCATE curDBLogin
GO

-- Kill logins of database
EXEC dbo.USP_KillSPID 'CommonControlDB'

-- Drop itself
DROP PROCEDURE dbo.USP_KillSPID
推荐 0
本文由 BIWORK 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册