在 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 的引數。