在 TRYCATCH 块中抛出异常

你可以在 try catch 块中抛出异常:

DECLARE @msg nvarchar(50) = 'Here is a problem!'
BEGIN TRY
    print 'First statement';
    THROW 51000, @msg, 15;
    print 'Second statement';
END TRY
BEGIN CATCH
    print 'Error: ' + ERROR_MESSAGE();
    THROW;
END CATCH

在 CATCH 块中处理异常,然后使用不带参数的 THROW 重新抛出异常。

First statement
Error: Here is a problem!
Msg 51000, Level 16, State 15, Line 39
Here is a problem!

THROW 与 RAISERROR 类似,但有以下不同之处:

  • 建议新应用程序应使用 THROW 而不是 RASIERROR。
  • THROW 可以使用任何数字作为第一个参数(错误号),RAISERROR 只能在 sys.messages 视图中使用 id
  • THROW 的严重程度为 16(不能更改)
  • THROW 无法格式化 RAISERROR 之类的参数。如果需要此功能,请使用 FORMATMESSAGE 函数作为 RAISERROR 的参数。