SQLServer中DBCC INPUTBUFFER显示从客户端发送到 SQL Server 实例的最后一个语句

SQLServer中DBCC INPUTBUFFER显示从客户端发送到 SQL Server 实例的最后一个语句

1、本文内容

  • 语法
  • 参数
  • 结果集
  • 权限
  • 示例

适用于:

  • SQL Server
  • Azure SQL 数据库
  • Azure SQL 托管实例

显示从客户端发送到 SQL Server 实例的最后一个语句。

2、语法

DBCC INPUTBUFFER ( session_id [ , request_id ] )
[ WITH NO_INFOMSGS ]

3、参数

  • session_id
    与各活动主连接关联的会话 ID。

  • request_id
    要在当前会话中搜索的精确请求(批)。

  • 下面的查询返回 request_id:
    SELECT request_id FROM sys.dm_exec_requests WHERE session_id = @@spid;

  • WITH
    启用要指定的选项。

    • NO_INFOMSGS

      取消严重级别从 0 到 10 的所有信息性消息。

4、结果集

DBCC INPUTBUFFER 返回带有以下列的行集。

列名称 数据类型 说明
EventType nvarchar(30) 事件类型。 这可能是 RPC 事件或 Language 事件。 检测不到上一个事件时,输出为 No Event。
Parameters smallint 0 = 文本、1- n = Parameters
EventInfo nvarchar(4000) 对于 RPC 的 EventType,EventInfo 仅包含过程名。 对于 Language 的 EventType,仅显示事件的前 4000 个字符。

例如,当缓冲区中的最后一个事件是 DBCC INPUTBUFFER (132) 时,DBCC INPUTBUFFER 将返回以下结果集。

SELECT @@SPID

DBCC INPUTBUFFER(132)

EventType      Parameters EventInfo
-------------- ---------- ---------------------
Language Event 0          DBCC INPUTBUFFER (132)
  
(1 row(s) affected)
  

5、权限

SQL Server 要求具有 VIEW SERVER STATE 权限,或者 sysadmin 固定服务器角色的成员身份。

如果都没有,那么用户只能查看其自己会话的输入缓冲区。 这意味着 session_id 必须与正在运行该命令的会话 ID 相同。 要确定会话 ID,请执行以下查询:

SELECT @@spid;

SQL 数据库高级层和业务关键层需要数据库的 VIEW DATABASE STATE 权限。 SQL 数据库标准层、基本层和常规用途层需要 SQL 数据库管理员帐户。

6、示例

以下示例在一个连接上运行一个时间较长的事务,而与此同时在另一个连接上运行 DBCC INPUTBUFFER。

CREATE TABLE dbo.T_dbcc_inputbuffer (id int primary key, Col1 INT, Col2 CHAR(3));
GO

DECLARE @i INT = 0;

BEGIN TRANSACTION

SET @i = 0;

WHILE (@i < 50000)
BEGIN
    INSERT INTO dbo.T_dbcc_inputbuffer VALUES (@i,@i, CAST(@i AS CHAR(3)));
    SET @i += 1;
END;

COMMIT TRANSACTION;

-- Start new connection #2.
DBCC INPUTBUFFER (52);

你可能感兴趣的:(sqlserver,数据库)