【发布时间】:2010-01-18 15:18:11
【问题描述】:
这是对问题的跟进 Nested stored procedures containing TRY CATCH ROLLBACK pattern?
在 catch 块中,我使用存储过程通过读取 ERROR_MESSAGE()、ERROR_PROCEDURE()、ERROR_LINE() 等来报告(重新引发)错误。如 here 所述,我也有一个检查,以便它可以确定错误是否已经被重新抛出(这发生在嵌套存储过程中,因为错误信息通过每个 TRY CATCH 块向下传递)。
我想做的,无论是直接在“ReportError”中,还是间接地使用我的模式(如第一个问题中所述),都是记录堆栈跟踪 - 所以当 ReportError 检测到它正在接收自己抛出的错误时,它将堆栈的下一级附加到错误消息中。这将帮助我避免看到来自一些小实用程序存储过程的错误消息,而无法知道调用它的方法。如果我尝试直接在 ReportError 中执行此操作,它会失败,因为重新抛出的错误报告自己来自 ReportError - 只有原始错误可见。
是否有某种方法可以让 ReportError 在 SQL Server 中执行堆栈跟踪,而无需将参数传递给每个存储过程,也无需使用 #temp 表手动维护此类跟踪?基本上我想要 ERROR_PROCEDURE() 和 ERROR_LINE() 的递归调用。
【问题讨论】:
-
我刚刚在我的博客中添加了一篇可能对您有所帮助的帖子。我将展示如何在 SQL Server 中创建调用堆栈。 thecodepage.com/post/TIP-A-Call-Stack-in-SQL-Server.aspx
-
@GabrielMcAdams 您文章的链接已损坏。您是否有机会在此处更新它或将解决方案作为答案发布?
标签: sql-server-2005 tsql error-handling try-catch stack-trace