RAISERROR 抛出的错误未进入 CATCH 块
今天写了一个储存过程,希望当出错时通过 RAISERROR 抛出错误进入 CATCH 块,代码如下:
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)即可解决。