如何从以下请求中获取请求的全文:
SELECT t.[text]
FROM sys.dm_exec_requests AS r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
Run Code Online (Sandbox Code Playgroud)
在这里,对于足够长的请求,请求文本会中断。我使用 SSMS 17 和 18 版本。
这可能是由于网格结果可以返回的最大字符数,65535
.
从SSMS 18.2开始,您可以更改此设置。
感谢Aaron Bertrand指出这一点。
亚伦还提到:
如果 64kb 是您达到的限制,那么在很多地方,语句文本会在很早之前以任何方式被截断(参见字面上的任何执行计划)。
sys.dm_exec_sql_text的文本数据类型是nvarchar(max)
,没有问题。
您可以将列转换为 XML 作为解决方法
SELECT CAST(t.[text] AS XML)
FROM sys.dm_exec_requests AS r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
Run Code Online (Sandbox Code Playgroud)
或者Evgeniy Gribkov的更好方法
SELECT t.[text]
FROM sys.dm_exec_requests AS r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
FOR XML RAW, ELEMENTS;
Run Code Online (Sandbox Code Playgroud)
这样更好:SELECT t.[text] FROM sys.dm_exec_requests AS r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t FOR XML RAW, ELEMENTS; 由于请求文本不能总是转换为 XML。特别是远程调用存储过程时无法转换查询文本:“XML解析:第13行,字符129,非法限定名字符”
或将结果保存到文件
感谢埃里克·达林( Erik Darling)链接了一些更相关的答案
归档时间: |
|
查看次数: |
567 次 |
最近记录: |