解决SQL 死锁的语句

ALTER     procedure [dbo].[sp_lock_check]
@spid1 int = NULL,               
@spid2 int = NULL               
as

set nocount on

if @spid1 is not NULL
begin
        select         convert (smallint, req_spid) As spid,
                loginame=rtrim(loginame),hostname ,t2.name,
                rsc_dbid As dbid,
                rsc_objid As ObjId,
                rsc_indid As IndId,
                substring (v.name, 1, 4) As Type,
                substring (rsc_text, 1, 16) as Resource,
                substring (u.name, 1, 8) As Mode,
                substring (x.name, 1, 5) As Status

        from         master.dbo.syslockinfo(nolock),
                master.dbo.spt_values v(nolock),
                master.dbo.spt_values x(nolock),
                master.dbo.spt_values u(nolock),
                master.dbo.sysprocesses t1(nolock),
                sysobjects t2(nolock)
        where   master.dbo.syslockinfo.rsc_type = v.number
                        and v.type = 'LR'
                        and master.dbo.syslockinfo.req_status = x.number
                        and x.type = 'LS'
                        and master.dbo.syslockinfo.req_mode + 1 = u.number
                        and u.type = 'L'
                        and t1.spid=convert (smallint, req_spid)
                        and req_spid in (@spid1, @spid2)
                        and rsc_objid =t2.Id
end
else
begin

        select         convert (smallint, req_spid) As spid,
                loginame=rtrim(loginame),hostname ,t2.name,
                rsc_dbid As dbid,
                rsc_objid As ObjId,
                rsc_indid As IndId,
                substring (v.name, 1, 4) As Type,
                substring (rsc_text, 1, 16) as Resource,
                substring (u.name, 1, 8) As Mode,
                substring (x.name, 1, 5) As Status

        from         master.dbo.syslockinfo(nolock),
                master.dbo.spt_values v(nolock),
                master.dbo.spt_values x(nolock),
                master.dbo.spt_values u(nolock),
                master.dbo.sysprocesses t1(nolock),
                sysobjects t2(nolock)

        where   master.dbo.syslockinfo.rsc_type = v.number
                        and v.type = 'LR'
                        and master.dbo.syslockinfo.req_status = x.number
                        and x.type = 'LS'
                        and master.dbo.syslockinfo.req_mode + 1 = u.number
                        and u.type = 'L'
                        and t1.spid=convert (smallint, req_spid)
                        and rsc_objid =t2.Id
        order by spid


        select         convert (smallint, req_spid) As spid,
                loginame=rtrim(loginame),hostname ,t2.name,
                rsc_dbid As dbid,
                rsc_objid As ObjId,
                rsc_indid As IndId,
                substring (v.name, 1, 4) As Type,
                substring (rsc_text, 1, 16) as Resource,
                substring (u.name, 1, 8) As Mode,
                substring (x.name, 1, 5) As Status
into #temp
        from         master.dbo.syslockinfo(nolock),
                master.dbo.spt_values v(nolock),
                master.dbo.spt_values x(nolock),
                master.dbo.spt_values u(nolock),
                master.dbo.sysprocesses t1(nolock),
                sysobjects t2(nolock)

        where   master.dbo.syslockinfo.rsc_type = v.number
                        and v.type = 'LR'
                        and master.dbo.syslockinfo.req_status = x.number
                        and x.type = 'LS'
                        and master.dbo.syslockinfo.req_mode + 1 = u.number
                        and u.type = 'L'
                        and t1.spid=convert (smallint, req_spid)
                        and rsc_objid =t2.Id
        order by spid

DECLARE dbcc_inputbuffer CURSOR
READ_ONLY
FOR select distinct spid from #temp

DECLARE @spid int
OPEN dbcc_inputbuffer

FETCH NEXT FROM dbcc_inputbuffer INTO @spid
WHILE (@@fetch_status <> -1)
BEGIN
        IF (@@fetch_status <> -2)
        BEGIN
--                PRINT 'add user defined code here'
--                eg.

select @spid
dbcc inputbuffer(@spid)

        END
        FETCH NEXT FROM dbcc_inputbuffer INTO @spid
END

CLOSE dbcc_inputbuffer
DEALLOCATE dbcc_inputbuffer


end

return (0) -- sp_lock

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值