CREATEprocedure[dbo].[sp_who_lock] as begin declare@spidint,@blint, @intTransactionCountOnEntryint, @intRowcountint, @intCountPropertiesint, @intCounterint createtable #tmp_lock_who (id intidentity(1,1),spid smallint,bl smallint)
IF@@ERROR<>0RETURN@@ERROR
insertinto #tmp_lock_who(spid,bl) select0 ,blocked from (select*from master..sysprocesses where blocked>0 ) a wherenotexists(select*from (select*from master..sysprocesses where blocked>0 ) b where a.blocked=spid) unionselect spid,blocked from master..sysprocesses where blocked>0
IF@@ERROR<>0RETURN@@ERROR
-- 找到临时表的记录数 select@intCountProperties=Count(*),@intCounter=1 from #tmp_lock_who
-- 循环开始 while@intCounter<=@intCountProperties begin -- 取第一条记录 select@spid= spid,@bl= bl from #tmp_lock_who where id =@intCounter begin if@spid=0 select'引起数据库死锁的是: '+CAST(@blASVARCHAR(10)) +'进程号,其执行的SQL语法如下' else select'进程号SPID:'+CAST(@spidASVARCHAR(10))+'被'+'进程号SPID:'+CAST(@blASVARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下' DBCC INPUTBUFFER (@bl ) end