Correct.
SET XACT_ABORT выпрыгивает из пакета. Ваш ЕСЛИ является частью той же партии.
Если вы хотите обрабатывать ошибки, используйте BEGIN TRY и т. Д.
SET XACT_ABORT ON
BEGIN TRY
BEGIN TRANSACTION
---DO SOMETHING HERE THAT CAUSES AN ERROR
COMMIT TRANSACTION
END TRY
BEGIN CATCH
raiserror('SP failed. Step 7.', 20, -1) with log
END CATCH
GO
Меня также заинтриговала серьезность 20, потому что это разрывает связь. Обычно вы используете 16, что является ошибкой, определенной пользователем.