在SQLServer2016sys.dm_exec_input_buffer问题

我们都知道,DBCC命令有点尴尬因为你不能叫他们在T-SQL查询,你不能把它们输出到其他DMV / dmf.for的例子,你想返回最后一个可执行的SQL语句为每个用户会话…



sys.dm_exec_input_buffer



在SQL Server 2016中,事情变得简单多了,因为微软为你提供了一个新的dmfsys.dm_exec_input_buffer,哪一样DBCC缓存。



对sys.dm_exec_input_buffer使用非常简单:该DMF需要2个输入参数的会话和指定的会话请求ID。下面的代码显示了一个简单的调用新函数的例子。




SELECT * FROM sys.dm_exec_input_buffer(55, 0)



但你可以做更复杂的事情,喜欢使用CROSSAPPLY算子将信息与其他DMV。让我们看看下面的代码。




选择
r.session_id,
ib.event_info
从sys.dm_exec_requests R
加入sys.dm_exec_sessions的s.session_id = r.session_id
交叉应用sys.dm_exec_input_buffer(r.session_id,r.request_id)IB
哪里
s.is_user_process = 1



正如您在这里看到的,该查询返回所有当前执行查询的所有提交SQL语句。