SQL SERVER 查询正在实行的SQL语句

时间:2022-02-09 22:10:34

具体操作: 
根据master.dbo.sysprocesses中的spid和blocked查找当前阻塞语句的主人,然后使用DBCC INPUTBUFFER ()查看阻塞语句。 

例子: 
打开三个查询分析器 A、B、C 
创建一个测试用的表 testDia 
Create Table testDia(ID int); 
在A执行以下语句: 
Begin tran 
Insert Into testDia Values(1); 
在B执行以下语句: 
Select * from testDia 
当前情况:B中没有显示结果,显示状态为等待 
在C执行以下语句: 
declare @spid int, @blocked int 
select top 1 @blocked = blocked 
from master.dbo.sysprocesses 
where blocked > 0 
DBCC INPUTBUFFER (@blocked) 

技术参考: 
DBCC INPUTBUFFER (Transact-SQL) 
显示从客户端发送到 Microsoft SQL Server 2005 实例的最后一个语句。 
DBCC INPUTBUFFER ( session_id [ , request_id ] ) 
[WITH NO_INFOMSGS ] 
session_id 
与各活动主连接关联的会话 ID。 
request_id 
要在当前会话中精确搜索的请求(批)。 
下面的查询返回 request_id: 
复制代码 
SELECT request_id 
FROM sys.dm_exec_requests 
WHERE session_id = @@spidWITH 
启用要指定的选项。 
NO_INFOMSGS 
取消严重级别从 0 到 10 的所有信息性消息。