杀死指定数据库内的所有进程

Declare   @tblConnectedUsers   Table   (   
  SPID int )   
    
  Declare   @vcSQLText varchar(200),   
  @iSPID int   
    
  --Get   the   currently   connected   users   
  Insert   into     @tblConnectedUsers   
  Select   p.spid   
  from   master.dbo.sysprocesses   p   (nolock)   
  join   master..sysdatabases   d   (nolock)   on   p.dbid   =   d.dbid   
  Where   d.[name]   =   '数据库名'   -->   database   name   here   
    
  --Loop   though   the   connected   users   and   kill   their   connections   
  While   1   =   1   
  Begin   
    
  Select   top   1   @iSPID   =   SPID   
  From     @tblConnectedUsers   
  Where   SPID   >   IsNull(@iSPID,   0)     
  order   by   SPID   asc   
    
  --   break   when   there   are   no   more   SPIDs   
  If   @@RowCount   =   0   
  Break   
    
  --Build   the   SQL   string   
  Set   @vcSQLText   =   'Kill   '   +   Convert(varchar(10),   @iSPID)   
    
  Exec(   @vcSQLText   )   
    
  End   

-----------------------------------------------------------------------------------------

  CREATE   PROCEDURE   usp_KillUsers   @dbname   varchar(50)   as   
  SET   NOCOUNT   ON   
    
  DECLARE   @strSQL   varchar(255)   
  PRINT   'Killing   Users'   
  PRINT   '-----------------'   
    
  CREATE   table   #tmpUsers(   
  spid   int,   
  eid   int,   
  status   varchar(30),   
  loginname   varchar(50),   
  hostname   varchar(50),   
  blk   int,   
  dbname   varchar(50),   
  cmd   varchar(30))   
    
  INSERT   INTO   #tmpUsers   EXEC   SP_WHO   
    
    
  DECLARE   LoginCursor   CURSOR   
  READ_ONLY   
  FOR   SELECT   spid,   dbname   FROM   #tmpUsers   WHERE   dbname   =   @dbname   
    
  DECLARE   @spid   varchar(10)   
  DECLARE   @dbname2   varchar(40)   
  OPEN   LoginCursor   
    
  FETCH   NEXT   FROM   LoginCursor   INTO   @spid,   @dbname2   
  WHILE   (@@fetch_status   <>   -1)   
  BEGIN   
  IF   (@@fetch_status   <>   -2)   
  BEGIN   
  PRINT   'Killing   '   +   @spid   
  SET   @strSQL   =   'KILL   '   +   @spid   
  EXEC   (@strSQL)   
  END   
  FETCH   NEXT   FROM   LoginCursor   INTO     @spid,   @dbname2   
  END   
    
  CLOSE   LoginCursor   
  DEALLOCATE   LoginCursor   
    
  DROP   table   #tmpUsers   
  go   
  -------------------------------------------------------------------------------------------------
CREATE   PROC   Kill_Connections   (@dbName   varchar(128))   
  as   
  DECLARE   @ProcessId   varchar(4)   
  DECLARE   CurrentProcesses   SCROLL   CURSOR   FOR   
  select   spid   from   sysprocesses   where   dbid   =   (select   dbid   from   sysdatabases   where   name   =   @dbName   )   order   by   spid     
  FOR   READ   ONLY   
  OPEN   CurrentProcesses   
  FETCH   NEXT   FROM   CurrentProcesses   INTO   @ProcessId   
  WHILE   @@FETCH_STATUS   <>   -1   
  BEGIN   
  --print   'Kill   '   +   @processid   
  Exec   ('KILL   '   +     @ProcessId)   
  --Kill   @ProcessId   
  FETCH   NEXT   FROM   CurrentProcesses   INTO   @ProcessId   
  END   
  CLOSE   CurrentProcesses   
  DeAllocate   CurrentProcesses 

转载于:https://www.cnblogs.com/beyondjay/archive/2009/03/25/1421151.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值