检查锁定sql server数据库的process id create procedure #sp_who_lockasbegin declare @spid int declare @blk int declare @count int declare @index int declare @lock tinyint ?? set @lock = 0 ?? declare @temp_who_lock as table ( id int identity(1, 1), spid int, blk int ) ?? if @@error 0 return @@error ?? insert into @temp_who_lock ( spid, blk ) select 0, blocked from ( select * from master..sysprocesses where blocked > 0 ) a where not exists ( select top 1 1 from master..sysprocesses where a.blocked = spid and blocked > 0 ) union select spid, blocked from master..sysprocesses where blocked > 0 ?? if @@error 0 return @@error ?? select @count = count(1), @index = 1 from @temp_who_lock ?? if @@error 0 return @@error ?? if @count = 0 begin select n'没有阻塞和死锁信息' ?? return 0 end ?? while @index @index and exists ( select top 1 1 from @temp_who_lock where id <= @index and a.blk = spid ) ) begin set @lock = 1 ?? select @spid = spid, @blk = blk from @temp_who_lock where id = @index ?? select n'引起数据库死锁的是:' + cast(@spid as nvarchar(10)) + n'进程号,其执行的sql语法如下' ?? select @spid, @blk ?? dbcc inputbuffer (@spid) ?? dbcc inputbuffer (@blk) end ?? set @index = @index + 1 end ?? if @lock = 0 begin set @index = 1 ?? while @index <= @count begin select @spid = spid, @blk = blk from @temp_who_lock where id = @index ?? if @spid = 0 select n'引起阻塞的是:' + cast(@blk as nvarchar(10)) + n'进程号,其执行的sql语法如下' else select n'进程号spid:' + cast(@spid as nvarchar(10)) + n'被进程号spid:' + cast(@blk as nvarchar(10)) + n'阻塞,其当前进程执行的sql语法如下' ?? dbcc inputbuffer (@spid) ?? dbcc inputbuffer (@blk) ?? set @index = @index + 1 end end ?? return 0endgo?exec #sp_who_lock