if
exists
(
select
*
from
dbo.sysobjects
where
id
=
object_id
(N
'
[dbo].[sp_who_lock]
'
)
and
OBJECTPROPERTY
(id, N
'
IsProcedure
'
)
=
1
)
drop procedure [ dbo ] . [ sp_who_lock ]
GO
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
转自: http://blog.csdn.net/wzy0623/archive/2007/06/21/1660925.aspx
drop procedure [ dbo ] . [ sp_who_lock ]
GO
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
转自: http://blog.csdn.net/wzy0623/archive/2007/06/21/1660925.aspx