有没有办法在存储过程中打印最后执行的SQL语句?
我发现了
DBCC INPUTBUFFER(@@SPID)
但是只打印最后一个较大的部分,即程序运行。我希望在存储过程中运行的每个语句都能完成相同的操作。
我们有一个包含大约30条SQL语句的庞大程序。我们喜欢这个过程在使用@debug = 1参数运行时输出所有SQL语句。当查询是动态的并构建到使用EXEC运行的varchar时,我们已经成功地做到了这一点,但是非动态查询呢?是否也可以打印这些?
答案 0 :(得分:2)
也许这可能有所帮助,从旧的脚本库中挖出这个。应该按照最新的顺序显示最后查询。如果您只想要其中一些,可以将TOP n
添加到选择中。
SELECT ProcName = COALESCE(OBJECT_NAME(S2.objectid), 'Ad-Hoc'),
s1.execution_count,
sql_statement = (SELECT TOP 1 SUBSTRING(S2.TEXT, S1.statement_start_offset / 2 + 1, ((CASE
WHEN S1.statement_end_offset = -1 THEN (LEN(CONVERT(NVARCHAR(MAX), S2.TEXT)) * 2)
ELSE S1.statement_end_offset
END) - S1.statement_start_offset) / 2 + 1)),
S1.last_execution_time
FROM sys.dm_exec_query_stats AS S1
CROSS APPLY sys.Dm_exec_sql_text(s1.sql_handle) AS S2
ORDER BY last_execution_time DESC