您的位置:首页 > 数据库

SQL Server中强制关闭数据库连接

2014-03-07 10:57 399 查看
1.问题引入

在SQL Server中备份/还原/分离/脱机/删除指定数据库时, 如果有其他用户正在使用此数据库时, SQL Server为了防止数据异常, 会报错而终止你的操作.

  
当然, 在SQL 2005/2008里, 在做[分离/删除]数据库时提供了一个选项[关闭所以连接]供勾选(SQL 2000好像没有哦), 然而[备份/还原]操作却没有此选择, 也许你会说可以先[脱机数据库]再做[备份还原]操作, 对, 但你会发现[脱机]处理太慢了J, 那在SQL2005以及SQL 2008下有哪些方法可以解决此问题呢???    

2。解决办法
在这里我只介绍一种使用自己写的存储过程来解决的方案
存储过程代码如下所示:

 

 

USE master  

 

go   

 

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)  

    DROP PROCEDURE [dbo].[p_killspid]  

go  

create   proc   p_killspid   

@dbname   varchar(200) --要关闭进程的数据库名   

as       

declare   @programName     nvarchar(200),   

@spid   nvarchar(20)   

 

declare   cDblogin   cursor   for   

select   cast(spid   as   varchar(20))  AS spid   from   master..sysprocesses   where   dbid=db_id(@dbname)   

open   cDblogin  

fetch   next   from   cDblogin   into   @spid   

while   @@fetch_status=0   

begin      

--防止自己终止自己的进程    

--否则会报错不能用KILL 来终止您自己的进程。     

IF  @spid <> @@SPID  

    exec( 'kill   '+@spid)   

fetch   next   from  cDblogin   into   @spid   

end       

close   cDblogin   

deallocate   cDblogin  

go   

 

 

 

 

  exec   p_killspid     '数据库名'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: