dm_exec_sql_text 与 dm_exec_input_buffer 之间的区别

问题描述 投票:0回答:1

根据 Microsoft 文档,

dm_exec_sql_text
返回由指定 sql_handle 标识的 SQL 批处理的文本,而
dm_exec_input_buffer
返回有关提交到 SQL Server 实例的语句的信息。

我使用

DBCC INPUTBUFFER
来获取最后执行的 SQL。但看起来
dm_exec_sql_text
dm_exec_input_buffer
都是替代品
DBCC INPUTBUFFER
。如果是这样的话,那么它们之间的主要区别是什么?我们什么时候应该使用其中之一?

sql sql-server t-sql
1个回答
2
投票

sys.dm_exec_input_buffer
仅表示开始请求的批处理或RPC调用,换句话说,是客户端直接发起的命令,而不是任何后续调用的过程或触发器。如文档中所述,您只能传递
session_id
request_id
。正如您所注意到的,这相当于
DBCC INPUTBUFFER

同时,可以向

sys.dm_exec_sql_text
传递
sql_handle
plan_handle
,它们可以从各个地方获取,尤其是从
sys.dm_exec_requests
,并检索 当前 正在执行的批处理范围(临时或过程或触发器),这意味着您可以获取“当前”执行语句的文本,即使它位于过程内部,而不仅仅是初始批次。

© www.soinside.com 2019 - 2024. All rights reserved.