Another answer comes down to the DIFFERENCES between RaisError and Throw ... as RaisError does NOT honor Set Xact_Abort.
Moreover, Microsoft recommends that "new applications should use THROW instead." - Source
Excerpt:
RAISERROR statement | THROW statement |
---|---|
If a msg_id is passed to RAISERROR, the ID must be defined in sys.messages. | The error_number parameter doesn't have to be defined in sys.messages. |
The msg_str parameter can contain printf formatting styles. | The message parameter doesn't accept printf style formatting. |
The severity parameter specifies the severity of the exception. | There's no severity parameter. When THROW is used to initiate the exception, the severity is always set to 16. However, when THROW is used to rethrow an existing exception, the severity is set to that exception's severity level. |
Doesn't honor SET XACT_ABORT. | Transactions are rolled back if SET XACT_ABORT is ON. |