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