DBCC INPUTBUFFER (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例
显示从客户端发送到 SQL Server 实例的最后一个语句。
语法
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 = @@spid;
WITH
启用要指定的选项。
NO_INFOMSGS
取消严重级别从 0 到 10 的所有信息性消息。
结果集
DBCC INPUTBUFFER
返回带有以下列的行集。
列名称 | 数据类型 | 说明 |
---|---|---|
EventType | nvarchar(30) | 事件类型。 这可能是 RPC 事件或 Language 事件。 检测不到上一个事件时,输出为 No Event。 |
参数 | smallint | 0 = 文本 1- n = Parameters |
EventInfo | nvarchar(4000) | 对于 RPC 的 EventType,EventInfo 仅包含过程名。 对于 Language 的 EventType,仅显示事件的前 4000 个字符。 |
例如,当缓冲区中的最后一个事件是 DBCC INPUTBUFFER (11)
时,DBCC INPUTBUFFER
将返回以下结果集。
EventType Parameters EventInfo
-------------- ---------- ---------------------
Language Event 0 DBCC INPUTBUFFER (11)
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
注意
从 SQL Server 2014 (12.x) SP2 开始,使用 sys.dm_exec_input_buffer 返回有关提交到 SQL Server 实例的语句的信息。
权限
SQL Server 要求具有 VIEW SERVER STATE 权限,或者 sysadmin 固定服务器角色的成员身份。
如果都没有,那么用户只能查看其自己会话的输入缓冲区。 这意味着 session_id 必须与正在运行该命令的会话 ID 相同。 要确定会话 ID,请执行以下查询:
SELECT @@spid;
SQL 数据库高级层和业务关键层需要数据库的 VIEW DATABASE STATE 权限。 SQL 数据库标准层、基本层和常规用途层需要 SQL 数据库管理员帐户。
示例
以下示例在一个连接上运行一个时间较长的事务,而与此同时在另一个连接上运行 DBCC INPUTBUFFER
。
CREATE TABLE dbo.T1 (Col1 INT, Col2 CHAR(3));
GO
DECLARE @i INT = 0;
BEGIN TRANSACTION
SET @i = 0;
WHILE (@i < 100000)
BEGIN
INSERT INTO dbo.T1
VALUES (@i, CAST(@i AS CHAR(3)));
SET @i += 1;
END;
COMMIT TRANSACTION;
--Start new connection #2.
DBCC INPUTBUFFER (52);