Почему 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 вызывает ошибку во время выполнения, вся транзакция завершается и откатывается.
Означает ли это, что я должен использовать явную транзакцию?