RAISERROR 抛出的错误未进入 CATCH 块
来源:互联网 发布:mac中毒会有什么反应 编辑:程序博客网 时间:2024/06/07 08:36
今天写了一个储存过程,希望当出错时通过 RAISERROR 抛出错误进入 CATCH 块,代码如下:
create procedure dbo.mp_CancelKHExport@ExpUID CHAR(16),@UserName VARCHAR(30),@Result BIT OUTPUT,@ErrMsg NVARCHAR(250) OUTPUTasbegindeclare @trancount intselect @trancount=@@TRANCOUNT, @Result=0, @ErrMsg=''BEGIN TRYBEGIN TRANdeclare @ExpType VARCHAR(50)select @ExpType=ExportType from XHExportInfo where UID=@ExpUID and Active=1print 'exptype=' + coalesce(@exptype, '不存在')if @ExpType='StampP'exec dbo.mp_CancelStampP @ExpUID, @Result output, @ErrMsg outputelse if @ExpType is nullraiserror('该导出不存在或者已经被撤销了', 10, 1)elseraiserror('尚未实现该功能', 10, 1)update XHExportInfo set Active=0, Remark=dbo.mfn_FormatDateTime(getdate(), 'Y-M-D H:N:S') + ' 被 ' + @UserName + ' 撤销'where UID=@ExpUIDCOMMIT TRANselect @Result=1, @ErrMsg='--'END TRYBEGIN CATCHif @@TRANCOUNT>@trancountROLLBACK TRANselect @Result=0, @ErrMsg=ERROR_MESSAGE()END CATCHend
但是,测试时发现当执行到:
else if @ExpType is nullraiserror('该导出不存在或者已经被撤销了', 10, 1)
执行 raiserror('该导出不存在或者已经被撤销了', 11, 1) 之后,并没有跳转到 BEGIN CATCH 块中,而是继续执行了 select @Result=1, @ErrMsg='--',并且,RAISERROR 所抛出的错误还输出到控制台查询 MSDN 发现,有这样一段说明:如果在 TRY...CATCH 构造的 TRY 块中执行的 RAISERROR 严重度介于 11 到 19 之间,会导致将控制传递到关联的 CATCH 块。如果指定 10 或更低的严重度,将使用 RAISERROR 返回消息,而不调用 CATCH 块。PRINT 不会将控制传输到 CATCH 块。原因就是严重程度小于11,将其改为RAISERROR('该导出不存在或者已经被撤销了', 11, 1)即可解决。
- RAISERROR 抛出的错误未进入 CATCH 块
- 中C# catch 块中可以俘获 SQL Server 抛出的自定义异常(RAISERROR)
- C# catch 块中可以俘获 SQL Server 抛出的自定义异常(RAISERROR)(轉)
- 未抛出的原因是在catch中使用了return语句,导致异常无法抛出insert*方法之外
- 错误:未报告的异常错误,必须对其进行捕获或声明以便抛出
- 方法内catch块throw Exception 未捕获仍然编译通过的问题
- raiserror pb错误
- “对象变量或with块变量未设置”的错误
- Try-catch异常抛出的简单用法
- 错误处理try-catch,异常抛出throws、throw
- JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常
- JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常
- 有趣的RAISERROR
- 在事物中try catch但未抛出异常,导致事务未回滚
- java线程中try catch finally块和throw抛出异常
- 抛出异常throw,catch
- RAISERROR
- raiserror
- 学习OpenCV——SVM 手写数字检测
- MOVZX
- Tomcat优化及压力测试实例 .
- 历经10年的JAVA全套学习路线图(附教程下载地址)
- 使用setStyleSheet来设置图形界面的外观
- RAISERROR 抛出的错误未进入 CATCH 块
- uml几种状态图
- Userdata
- QLabel中html标签的使用
- 使用Handler在线程之间传递消息所遇到的问题及解决方法
- boost学习之-Signals
- JNI(一):初识JNI
- Java拷贝文件四种方法
- App Icons on iPad and iPhone