sql - 在 sql server 中发生不可提交事务的情况下如何获取实际错误?
问题描述
我正在从另一个从内部调用另一个 sp 的 sp 调用 sp。例如 sp1->sp2->sp3 我在所有这些中都使用了 TRY-CATCH。我在 sp3 中显式地引发了一个错误,然后在 try-catch 中捕获,然后再次引发它,在 sp2 中捕获它,然后再次引发它,然后在 sp3 中捕获它。这工作正常。
但是,当我在最外层 sp1 上添加 BEGIN TRAN 时。我得到当前事务无法提交,并且无法支持写入日志文件的操作。回滚事务。错误。
我想要的是捕获导致问题的实际错误而不是这个错误。此错误消息是实际错误的影响。为什么它根本没有告诉我导致当前事务不可提交的实际错误?
我搜索了很多并阅读了很多关于这个错误的帖子,但没有一个回答我的问题,因为几乎每个答案或问题主要是关于通过使用 XACT_STATE 来确定是回滚还是提交事务来处理这个错误。但是,就我而言,我只是在出现任何错误的情况下回滚。
例如 BEGIN TRY BEGIN TRAN
EXEC sp2
COMMIT TRAN
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE()
SELECT @@TRANCOUNT > 0
ROLLBACK
END CATCH
例如,我在 sp3 RAISERROR('Catching errors from sp3 for testing...', 11, 2) 中添加了这一行
现在在事务中调用 sp1 应该会给我这个特殊的错误,所以我可以处理它。
但是,如果我从最外面的 sp3 中删除 BEGIN TRAN,那么我会得到实际的错误并且工作正常。
解决方案
推荐阅读
- reactjs - 如何在 react js 中使用 npm 安装最新版本的 fontawesome?
- ios - 动态增加 tableView 中 UIView 的高度
- jquery - 如何使用引导程序使按钮出现在中心
- iphone - UITabbar 还使用额外的 UIButton [hell] swift 4 更改选项卡
- java - 如果在 Java/Android 中传递,请检查两个日期时间
- linux - 在 Linux 中更改 LANG 没有给出预期的结果
- jquery - 如果 id 在带有 jQuery 的数组中,则显示表格行
- javascript - 我们如何在不使用 Redux 的情况下在 react-native 中实现撤消/重做、图像旋转和放大和缩小方法
- outlook - 在不同计算机上的 Outlook 日历中关联会议
- javascript - 模板中的 Vue.js 动态数组不起作用