如何在SQL Server的catch块中获取调用堆栈信息?

Ali*_*EXE 3 sql-server t-sql

当我的查询中有多个错误,并且我在 catch 块中使用try catchand函数时,我只会收到最后一条错误消息。error_message()

例如,如果我的错误是:

Msg 2714, Level 16, State 5, Line 14
There is already an object named 'IX_EntityTypeConfigs' in the database.
Msg 1750, Level 16, State 1, Line 14
Could not create constraint or index. See previous errors.
Run Code Online (Sandbox Code Playgroud)

在 catch 块中我刚刚得到:

Could not create constraint or index. See previous errors.
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到完整的消息?

我搜索了一下,发现这是 SQL Server 的限制,但文章属于 2014 年及之前的版本。

我想知道从那以后情况是否发生了变化。

Zik*_*ato 6

我相信它仍然是正确的。推荐的方法是通过命令将错误重新抛出给应用程序THROW并让应用程序处理它。

最好的资源仍然是Erland Sommarskog 的这篇文章 - SQL Server 中的错误和事务处理

您还可以使用扩展事件(XE) (在 SQL Server 端)捕获错误error_reported。这将显示所有被触发的错误。

我在这里写了一篇博客:调查扩展事件的错误