我对TSQL中的某些东西感到惊讶.我认为,如果xact_abort打开,调用类似的东西
raiserror('Something bad happened', 16, 1);
Run Code Online (Sandbox Code Playgroud)
将停止执行存储过程(或任何批处理).
但我的ADO.NET错误消息恰恰相反.我在异常消息中收到了raiserror错误消息,以及之后发生的下一个错误消息.
这是我的解决方法(无论如何这是我的习惯),但它似乎不应该是必要的:
if @somethingBadHappened
begin;
raiserror('Something bad happened', 16, 1);
return;
end;
Run Code Online (Sandbox Code Playgroud)
文档说这个:
当SET XACT_ABORT为ON时,如果Transact-SQL语句引发运行时错误,则终止并回滚整个事务.
这是否意味着我必须使用显式交易?