【SQL SERVER】查询死锁语句

CREATE Table #Who(spid int,
ecid  int,
status  nvarchar(50),
loginname  nvarchar(50),
hostname  nvarchar(50),
blk  int,
dbname  nvarchar(50),
cmd  nvarchar(50),
request_ID  int);

CREATE  Table  #Lock(spid  int,
dpid  int,
objid  int,
indld  int,
[Type]  nvarchar(20),
Resource  nvarchar(50),
Mode  nvarchar(10),
Status  nvarchar(10)
);

INSERT  INTO  #Who
EXEC  sp_who  active    --看哪个引起的阻塞,blk  
INSERT  INTO  #Lock
EXEC  sp_lock    --看锁住了那个资源id,objid  

DECLARE  @DBName  nvarchar(20);
SET  @DBName='NameOfDataBase'

SELECT  #Who.*  FROM  #Who  WHERE  dbname=@DBName
SELECT  #Lock.*  FROM  #Lock
JOIN  #Who
ON  #Who.spid=#Lock.spid
AND  dbname=@DBName;

--最后发送到SQL  Server的语句
DECLARE  crsr  Cursor  FOR
SELECT  blk  FROM  #Who  WHERE  dbname=@DBName  AND  blk<>0;
DECLARE  @blk  int;
open  crsr;
FETCH  NEXT  FROM  crsr  INTO  @blk;
WHILE  (@@FETCH_STATUS  =  0)
BEGIN;
dbcc  inputbuffer(@blk);
FETCH  NEXT  FROM  crsr  INTO  @blk;
END;
close  crsr;
DEALLOCATE  crsr;

--锁定的资源
SELECT  #Who.spid,hostname,objid,[type],mode,object_name(objid)  as  objName  FROM  #Lock
JOIN  #Who
ON  #Who.spid=#Lock.spid
AND  dbname=@DBName
WHERE  objid<>0;

DROP  Table  #Who;
DROP  Table  #Lock;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值