任何人都可以帮助我吗,要么给我查询,要么给我指出一篇文章,因为我似乎找不到一篇文章。
我有一个引发错误的会话的 SPID,我们需要知道该 SPID 运行的查询的完整 SQL 文本。
有人可以帮忙吗?
请注意,我已尝试以下操作,但没有一个给我完整的 SQL 文本:
DECLARE @sqltext VARBINARY(128)
SELECT @sqltext = sql_handle
FROM sys.sysprocesses
WHERE spid = 174
SELECT TEXT
FROM sys.dm_exec_sql_text(@sqltext)
GO
SELECT
sysprc.spid,sysprc.waittime,sysprc.lastwaittype,DB_NAME(sysprc.dbid) AS database_name,
sysprc.cpu,sysprc.physical_io,sysprc.login_time,sysprc.last_batch,sysprc.status,
sysprc.hostname,sysprc.[program_name],sysprc.cmd,sysprc.loginame,
OBJECT_NAME(sqltxt.objectid) AS [object_name],sqltxt.text
FROM sys.sysprocesses sysprc
OUTER APPLY sys.dm_exec_sql_text(sysprc.sql_handle) sqltxt
where spid = 174
DBCC INPUTBUFFER(174)
go
Run Code Online (Sandbox Code Playgroud)
有几个选项可用于监视主动运行的查询,这些查询将提供完整的查询文本:
SQL Server Profiler - 这是用于跟踪正在运行的查询的最不推荐的方法,该工具有点笨重,如果您的 SQL 实例上同时运行大量数据,有时可能很难搜索到您正在寻找的确切查询。时间。但它的使用也非常简单,甚至提供了在跟踪中捕获的存储过程查询中使用的参数值。
扩展事件- 这是 Microsoft 建议的上述 Profiler 的替代品。虽然学习曲线有点复杂,但扩展事件提供了更深入、更易于搜索的信息。
查询存储- 这是 Microsoft 发布的最新查询监控功能。虽然通常旨在监视查询性能,但它也提供查询的全文,甚至可以在sys.query_store_query_textsys 视图中访问。请注意,此功能仅在 SQL Server 2016 及更高版本中可用。
不过,这些功能中的每一个都需要已经运行,以便您能够捕获查询。如果您尚未使用监视正在运行的功能或工具,我不认为有可靠的方法可以追溯查找完整的查询文本。