杀所有进程

declare  @MaxAttemptsToKillEachUserProcess int
declare @CurrentAttempts int
declare @ServerName varchar(128)
declare @DatabaseName varchar(128)
declare @SQLCommand varchar(128)
declare @spid int
declare @LoginName varchar(128)
set nocount on
set @MaxAttemptsToKillEachUserProcess = 3 
-- 得到服务器和数据库名称
set @ServerName = cast(isnull(serverproperty('ServerName'), 'Unknown') as sysname)
 -- 该表记录用户进程标识
if  object_id('tempdb..#tempProcesses', 'U') is not null
begin
       drop table #tempProcesses
end
create table #tempProcesses (
  spid int,
  ecid int,
  status varchar(256),
  LoginName varchar(128),
  HostName  varchar(128),
  BlockedBy varchar(128),
  DatabaseName varchar(128),
  command varchar(256)
 )
insert into #tempProcesses
exec sp_who
delete  #tempProcesses where spid <= 50 or spid=@@spid
declare cur1 cursor for select spid,LoginName,DatabaseName from #tempProcesses

open cur1
fetch cur1 into @spid,@LoginName,@DatabaseName
while @@fetch_status=0
begin
    select  @SQLCommand ='kill ' + cast(@spid as varchar(32))
    set @CurrentAttempts = 0
    while @CurrentAttempts <= @MaxAttemptsToKillEachUserProcess
    begin
        exec(@SQLCommand)
        if @@error<>0
        begin
            select 'Error killing process ' + cast(@spid as varchar(32)) +', of login ' + @LoginName
             + ', on database ' + @DatabaseName+ '。 这个进程可能已被用户中止。'
           break
        end
        -- 确认进程真正终止
       exec sp_who @spid
       if @@rowcount=0
           break
       else 
           set  @CurrentAttempts = @CurrentAttempts + 1
    end
    fetch cur1 into @spid,@LoginName,@DatabaseName
end
close cur1
deallocate cur1
drop table #tempProcesses
go

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值