加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver查看表是否被锁

发布时间:2020-12-12 14:35:34 所属栏目:MsSql教程 来源:网络整理
导读:? CREATE? ?procedure [dbo].[sp_who_lock] as begin declare @spid int,@bl int, ? ? ? ? ? ? ? ?@intTransactionCountOnEnt ry? ?int, ? ? ? ? ? ? ? ?@intRowcount? ? ? ?int, ? ? ? ? ? ? ? ?@intCountProperties? ? ?int, ? ? ? ? ? ? ? ?@intCounter?
?

CREATE??procedure [dbo].[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 master..sysprocesses where??blocked>0 ) a
???where not exists(select * from (select * from master..sysprocesses where??blocked>0 ) b
???where a.blocked=spid)
???union select spid,blocked from master..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

exec dbo.[sp_who_lock]

--索引

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读