打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何终止SQL Server中的用户进程

USE [master]
GO
IF  EXISTS (SELECT * FROM master.dbo.sysobjects
    WHERE id = OBJECT_ID(N'[kill2]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[kill2]
GO
--Usage1: Kill2 '51-57' --> Kills all the session IDs from 51 to 57
--Usage2: Kill2 '58'  --> Kills the session IDs 58
--Usage3: Kill2 '51,56,100,58' 
    --> Kills the session IDs 51,56,100 and 58
--Usage4: Kill2 'DB=MyDatabase' 
    --> Kills all the session IDs that are connected
   to the database "MyDatabase"

use master
go
set concat_null_yields_null off
go
create procedure kill2 @param2 varchar(500)
as
--declare @param2 varchar(500)
declare @param varchar(500)
declare @startcount int
declare @killcmd varchar(100)
declare @endcount int
declare @spid int
declare @spid2 int
declare @tempvar varchar(100)
declare @tempvar2 varchar(100)
--set @param2 ='54'
set @param=REPLACE(@param2,' ','')
if CHARINDEX('-',@param) <> 0
begin
select @startcount= convert(int,SUBSTRING(@param,1,charindex('-',@param)-1))
select @endcount=convert(int,SUBSTRING(@param,charindex('-',@param)+1,(LEN(@param)-charindex('-',@param))))
print 'Killing all SPIDs from ' + convert(varchar(100),@startcount)+' to ' +convert(varchar(100),@endcount)
while @startcount <=@endcount
begin
set @spid=(select spid from master.dbo.sysprocesses where spid=@startcount and spid>50)
if @spid = @startcount
begin
print 'Killing '+convert(varchar(100),@startcount)
set @killcmd ='Kill '+convert(varchar(100),@startcount)
exec(@killcmd)
end
else
begin
Print 'Cannot kill the SPID ' +convert(varchar(100),@startcount) + ' because it does not Exist'
end
set @startcount=@startcount + 1
end

end

if CHARINDEX(',',@param) <> 0
begin
set @tempvar =@param
 while charindex(',',@tempvar ) <> 0
 begin
 SET @tempvar2=left(@tempvar,charindex(',',@tempvar)-1)
 set @spid=(select spid from master.dbo.sysprocesses where spid=CONVERT(varchar(100),@tempvar2) and spid>50)
 if @spid = CONVERT(varchar(100),@tempvar2)
  begin
  print 'Killing '+CONVERT(varchar(100),@tempvar2)
  set @killcmd='Kill '+CONVERT(varchar(100),@tempvar2)
  exec (@killcmd)
 
  end
  else
  begin
  Print 'Cannot kill the SPID ' +CONVERT(varchar(100),@tempvar2) + ' because it does not Exist'
  end
 set @tempvar =REPLACE(@tempvar,left(@tempvar,charindex(',',@tempvar)),'')
 end
 set @spid=(select spid from master.dbo.sysprocesses where spid=CONVERT(varchar(100),@tempvar) and spid>50)
 if @spid = CONVERT(varchar(100),@tempvar)
  begin
  print 'Killing '+CONVERT(varchar(100),@tempvar)
  set @killcmd='Kill '+CONVERT(varchar(100),@tempvar)
  exec (@killcmd)
 
  end
  else
  begin
  Print 'Cannot kill the SPID ' +CONVERT(varchar(100),@tempvar) + ' because it does not Exist'
  end
end

if CHARINDEX('=',@param2) <>0
begin
print 'Killing all the SPIDs that are connected to the database '+RIGHT(@param2,(len(@param2)-3))
declare dbcursor 
 cursor forward_only for select SPID from master.dbo.sysprocesses where DB_NAME(dbid) = RIGHT(@param2,(len(@param2)-3))
open dbcursor
fetch dbcursor into @spid
while @@FETCH_STATUS =0
begin
 set @spid2=(select spid from master.dbo.sysprocesses where spid=@spid and spid>50)
 if @spid = @spid2  begin
  print 'Killing '+CONVERT(varchar(100),@spid2)
  set @killcmd='Kill '+CONVERT(varchar(100),@spid2)
  exec (@killcmd)
 
  end
  else
  begin
  Print 'Cannot kill the SPID ' +CONVERT(varchar(100),@spid2) + ' because it does not Exist'
  end

fetch dbcursor into @spid
end
close dbcursor
deallocate dbcursor

end

if CHARINDEX('-',@param)=0 and CHARINDEX(',',@param) = 0  and CHARINDEX('=',@param)=0
begin
 set @spid=(select spid from master.dbo.sysprocesses where spid=CONVERT(varchar(100),@param) and spid>50)
 if @spid = CONVERT(varchar(100),@param)
  begin
  print 'Killing '+CONVERT(varchar(100),@param)
  set @killcmd='Kill '+CONVERT(varchar(100),@param)
  exec (@killcmd)
 
  end
  else
  begin
  Print 'Cannot kill the SPID ' +CONVERT(varchar(100),@param) + ' because it does not Exist'
  end

end
go
--kill2 '51'
--go
--kill2 '51-56'
--go
--kill2 '56,57,58,52'
--go
--kill2 'db=AdventureWorks2008'
--kill2 'db=My Database'
--go
--sp_who

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
sql server 脚本收集
如何通过T-SQL获得当前连接的客户端的IP和机器名
SQL中的数字格式化
SQL 小数位保留,如果不够保留位数,自动添加0
Stuff 的用法
数据库干货:整理SQLServer非常实用的脚本
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服