sql清除数据库的连接(for sqlserver2000)

大家都会碰到这样的问题,在SQL Server2000中经常要分离数据库,但是在分离前数据库还处于连接状态,这时要断开这个
连接,这时我们会想到用企业管理器去实现,但是现在我们想通过外部程序区执行它,咋办呢,只要找到相应的SQL语句就OK
了,在此我为大家提供一个存储过程来实现这个目的,在master数据库下创建以下这么个存储过程,该存储过程还有一个输入
参数(要断开连接的数据库),该存储过程过程具有返回值以及异常捕获,具体在存储过程中都有说明。如果想调用这个返回值
请参考我写的文章--SQL SERVER存储过程的返回值(总结)。
如果大家有更好的方法请告诉我,或者改进我的方法,我的联系方法是:QQ:870292445
-------------------------------------------------------------------------------------------------------------
--该存储过程主要是中断数据库的连接,有4个返回值:-2表示数据库为空或者不存在;-1表示不能删除系统数据库的进程;0表示中断成功;1表示中断失败
create procedure sp_kill_processes(@dbname varchar(100))
as
 begin
  --数据库如果为空或者不存在,返回-2
  declare @errMsg nvarchar(255)
  declare @count int
  set @dbname = ltrim(rtrim(@dbname))
  set @count = (select count(name) from sysdatabases where name = @dbname)
  if(@count <= 0)
   begin
    set @errMsg = 'database ' + @dbname + ' is not exist'
    raiserror(@errMsg,16,1)
    return -2
   end
  --数据库如果是系统数据库则返回-1
  if(@dbname = 'master' or @dbname = 'tempdb' or @dbname = 'model' or @dbname = 'msdb' or @dbname = 'pubs' or @dbname = 'Northwind')
   begin
    set @errMsg = @dbname + ' is a sysdatabase,its processes is allowed not to kill'
    raiserror(@errMsg,16,1)
    return -1
   end
  --数据库如果没有使用的线程则也表示成功,返回0
  set @count = (select count(spid) from sysprocesses where dbid = db_id(@dbname))
  if(@count <= 0)
   return 0
  --创建游标,中断进程
  declare @pro_kill nvarchar(255)
  declare tasklist_cursor cursor for select 'kill ' + convert(varchar(5),spid) + ' -- ' + p.loginame from sysprocesses p,sysdatabases d where p.dbid = d.dbid and d.name = @dbname
  open tasklist_cursor
  fetch next from tasklist_cursor into @pro_kill
  while(@@fetch_status = 0)
   begin
    exec(@pro_kill)
    if(@@error <> 0)
     begin
      set @errMsg = 'it meets error when close the link of database ' + @dbname
      raiserror(@errMsg,16,1)
      return 1
     end
    fetch next from tasklist_cursor into @pro_kill
   end
  close tasklist_cursor
  deallocate tasklist_cursor
  return 0
 end

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16436858/viewspace-630639/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16436858/viewspace-630639/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值