sqlserver查看表是否被锁

本文介绍了一个用于检测SQL Server中死锁情况的存储过程。该存储过程能够有效地找出导致死锁的进程,并显示其相关信息及执行的SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CREATE<wbr>procedure [dbo].[sp_who_lock]<br>as<br>begin<br>declare @spid int,@bl int,<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr>@intTransactionCountOnEnt<wbr>ry<wbr>int,<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr>@intRowcount<wbr><wbr><wbr>int,<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr>@intCountProperties<wbr><wbr>int,<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr>@intCounter<wbr><wbr><wbr>int<br><wbr>create table #tmp_lock_who (id int identity(1,1),spid smallint,bl smallint)<br><wbr><br><wbr>IF @@ERROR&lt;&gt;0 RETURN @@ERROR<br><wbr><br><wbr>insert into #tmp_lock_who(spid,bl) select<wbr>0 ,blocked<br><wbr><wbr>from (select * from master..sysprocesses where<wbr>blocked&gt;0 ) a<br><wbr><wbr>where not exists(select * from (select * from master..sysprocesses where<wbr>blocked&gt;0 ) b<br><wbr><wbr>where a.blocked=spid)<br><wbr><wbr>union select spid,blocked from master..sysprocesses where<wbr>blocked&gt;0</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr>IF @@ERROR&lt;&gt;0 RETURN @@ERROR<br><wbr><br>-- 找到临时表的记录数<br><wbr>select<wbr>@intCountProperties = Count(*),@intCounter = 1<br><wbr>from #tmp_lock_who<br><wbr><br><wbr>IF @@ERROR&lt;&gt;0 RETURN @@ERROR<br><wbr><br><wbr>if @intCountProperties=0<br><wbr>select '现在没有阻塞和死锁信息' as message</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

-- 循环开始
while @intCounter <= @intCountProperties
begin
-- 取第一条记录
<wbr>select<wbr>@spid = spid,@bl = bl<br><wbr>from #tmp_lock_who where id = @intCounter<br><wbr>begin<br><wbr>if @spid =0<br><wbr><wbr><wbr>select '引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下'<br><wbr>else<br><wbr><wbr><wbr>select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下'<br><wbr>DBCC INPUTBUFFER (@bl )<br><wbr>end</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

-- 循环指针下移
<wbr>set @intCounter = @intCounter + 1<br>end</wbr>


drop table #tmp_lock_who

return 0
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值