Почему Sql Server продолжает работать после raiserror, когда xact_abort включен?

Я просто удивился чему-то в TSQL. Я думал, что если xact_abort был включен, вызывая что-то вроде

raiserror('Something bad happened', 16, 1);

остановит выполнение хранимой процедуры (или любой пакет).

Но мое сообщение об ошибке ADO.NET доказало обратное. Я получил как сообщение об ошибке raiserror в сообщении об исключении, так и следующее, что сломалось после этого.

Это мой обходной путь (который в любом случае является моей привычкой), но, похоже, это не нужно:

if @somethingBadHappened
    begin;
        raiserror('Something bad happened', 16, 1);
        return;
    end;

Документы говорят это:

Когда SET XACT_ABORT установлен в ON, если инструкция Transact-SQL вызывает ошибку во время выполнения, вся транзакция завершается и откатывается.

Означает ли это, что я должен использовать явную транзакцию?

Ответы на вопрос(4)

Ваш ответ на вопрос