中易网

什么语句可以获得当前SQLSERVER正在执行查询或更新的语句或表名

答案:1  悬赏:40  
解决时间 2021-01-11 18:27
  • 提问者网友:我是女神我骄傲
  • 2021-01-11 12:16
什么语句可以获得当前SQLSERVER正在执行查询或更新的语句或表名
最佳答案
  • 二级知识专家网友:何以畏孤独
  • 2021-01-11 13:25
use master
go
create procedure sp_who_lock
as
begin
declare @spid int,@bl int,
        @intTransactionCountOnEntry         int,
        @intRowcount                         int,
        @intCountProperties                 int,
        @intCounter                         int
        create table #tmp_lock_who (
        id int identity(1,1),
        spid smallint,
        bl smallint)
        
        IF @@ERROR<>0 RETURN @@ERROR
        
        insert into #tmp_lock_who(spid,bl) select  0 ,blocked
          from (select * from sysprocesses where  blocked>0 ) a 
          where not exists(select * from (select * from sysprocesses where  blocked>0 ) b 
          where a.blocked=spid)
          union select spid,blocked from sysprocesses where  blocked>0
        IF @@ERROR<>0 RETURN @@ERROR        
         
-- 找到临时表的记录数
        select         @intCountProperties = Count(*),@intCounter = 1
        from #tmp_lock_who
        
        IF @@ERROR<>0 RETURN @@ERROR        
        
        if        @intCountProperties=0
                select '现在没有阻塞和死锁信息' as message
-- 循环开始
while @intCounter <= @intCountProperties
begin
-- 取第一条记录
                select         @spid = spid,@bl = bl
                from #tmp_lock_who where Id = @intCounter 
        begin
         if @spid =0 
            select '引起数据库死锁的是: '+ CAST(@bl AS VARCHAr(10)) + '进程号,其执行的SQL语法如下'
else
            select '进程号SPID:'+ CAST(@spid AS VARCHAr(10))+ '被' + '进程号SPID:'+ CAST(@bl AS VARCHAr(10)) +'阻塞,其当前进程执行的SQL语法如下'
DBCC INPUTBUFFER (@bl )
        end       
-- 循环指针下移
        set @intCounter = @intCounter + 1
end

drop table #tmp_lock_who
return 0
end
go
exec sp_who_lock
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息