/*
断开所有用户打开的连接
*/
use master
goif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_killspid]
GOcreate proc p_killspid
@dbname varchar(200) --要关闭进程的数据库名
as  
declare @sql  nvarchar(500)  
declare @spid nvarchar(20) declare #tb cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #tb
fetch next from #tb into @spid
while @@fetch_status=0
begin  
exec('kill '+@spid)
fetch next from #tb into @spid
end  
close #tb
deallocate #tb
go--用法  
exec p_killspid  '数据库名'

解决方案 »

  1.   

    Re: 如何切断连接?
    通过将SQL SERVER配置为单用户模式来达到这样的目的,这样操作的好处是:
    1.安全;
    2.可以指定进行事务回滚;
    3.可以指定时间;比如:
    1.通过使用ROLLBACK IMMEDIATE命令,可以在将数据库置于单用户时立即断开所有的连
    接:
    ALTER DATABASE NORTHWIND
    SET SINGLE_USER
    with rollback immediate2.最好的方式时提供一段时间,以便CLIENT可以完成事务(下面延迟60s):
    ALTER DATABASE NORTHWIND
    SET SINGLE_USER
    with ROLLBACK AFTER 60 SECONDS3.完成修复或备份之后,可以在恢复多用户模式:
    ALTER DATABASE NORTHWIND
    SET MULTI_USER
    4.REBOOT 服务器;