根据 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
。如果是这样的话,那么它们之间的主要区别是什么?我们什么时候应该使用其中之一?
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
,并检索 当前 正在执行的批处理范围(临时或过程或触发器),这意味着您可以获取“当前”执行语句的文本,即使它位于过程内部,而不仅仅是初始批次。