DBCC INPUTBUFFER
我知道SQL Server中有一个命令,
对我来说,输入缓冲区似乎是会话正在运行的 SQL。
SQL Server 也有sys.dm_exec_sql_text
,
并且sys.dm_exec_input_buffer
,其中
我有点困惑。对我来说,它们看起来非常相似且难以辨认。
我还看到了Jonathan Kehayias 的一篇文章 Understanding the sql_text Action in Extended Events
。他在文章中指出
创建此事件会话后,我们可以在环境中运行几个不同的测试场景,以显示此操作如何不是 sql_text,而是正在触发的事件的 input_buffer
他非常确信 SQL 文本不是输入缓冲区,我不明白其中的原因。有人可以帮忙澄清一下吗?谢谢。
DBCC INPUTBUFFER
显示指定会话(以及特定请求)下客户端实际发送的命令。这可能是一个临时批处理,也可能是一个过程。
sys.dm_exec_input_buffer
是上述形式的较新形式,它允许将结果集用作另一个查询的一部分。
sys.dm_exec_sql_text
给出特定批处理或计划句柄的 SQL 文本。
您可以通过多种方式获取此句柄,但通常您会通过 获取当前正在执行的会话命令的句柄
sys.dm_exec_requests
,该句柄可能嵌套在原始请求的调用堆栈中,例如通过过程、函数或触发器。因为这可能是较大 SQL 批处理的一部分,所以您需要使用statement_start_offset
并statement_end_offset
解析出正在执行的命令的确切文本。sql_text
扩展事件中的操作是XEvents 的一个特殊问题,调用的操作(数据字段)sql_text
实际上代表输入缓冲区,而不是当前正在执行的命令,即sys.dm_exec_input_buffer
not of的理论结果sys.dm_exec_sql_text
。