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

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     '数据库名'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值