Wil*_*eld 5 t-sql error-handling xact-abort
我正在尝试改进当前系统的错误处理,以产生更有意义的错误消息。我有一个“根”存储过程,该存储过程对其他嵌套存储过程进行了多次调用。
在根sp中,XACT_ABORT将其设置为,ON但在嵌套过程中,XACT_ABORT将其设置为OFF。我想从较低级别的过程中捕获特定的错误,而不是获取根过程的错误。
我经常看到错误, uncommittable transaction is detected at the end of the batch, the transaction is being rolled back.
将这些“混合”环境与XACT_ABORTs?
另外,如果您对高级错误处理有任何建议,将不胜感激。我想我想使用它,sp_executesql这样我就可以传递参数来获取错误输出,而不必修改所有存储过程并用于RAISERROR调用父过程的CATCH块。
SET XACT_ABORT的设置是在执行或运行时设置的,而不是在解析时设置的
即 XACT_ABORT不会从创建会话“复制”到每个过程,因此,任何未在内部显式设置此选项的PROC都会在运行时从环境会话继承该设置,这可能是灾难性的。
一般而言,FWIW始终确保XACT_ABORT全局打开该状态,并进行皮棉检查以确保我们的PROC均未覆盖此设置。
请注意,这XACT_ABORT不是万灵药-例如,您的PROC带有RAISERROR引起的错误不会终止该批处理。但是,似乎可以通过SQL 2012中的THROW关键字进行改进
正如您所建议的那样,根据Remus Rusanu的观察,结构化异常处理(TRY / CATCH)是一种更干净,更健壮的异常处理机制。
| 归档时间: |
|
| 查看次数: |
1710 次 |
| 最近记录: |