在 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 的参数。