SQL Server存储过程中最后执行的语句

时间:2015-10-01 09:01:40

标签: sql sql-server debugging stored-procedures

有没有办法在存储过程中打印最后执行的SQL语句?

我发现了

DBCC INPUTBUFFER(@@SPID)

但是只打印最后一个较大的部分,即程序运行。我希望在存储过程中运行的每个语句都能完成相同的操作。

我们有一个包含大约30条SQL语句的庞大程序。我们喜欢这个过程在使用@debug = 1参数运行时输出所有SQL语句。当查询是动态的并构建到使用EXEC运行的varchar时,我们已经成功地做到了这一点,但是非动态查询呢?是否也可以打印这些?

1 个答案:

答案 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