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

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 
posted @ 2009-03-25 10:44  helloworld22  阅读(331)  评论(0编辑  收藏  举报