我只是对TSQL中的某些东西感到惊讶。我以为如果打开xact_abort,调用类似
raiserror('Something bad happened', 16, 1);
将停止执行存储过程(或任何批处理)。
但是我的ADO.NET错误消息恰恰相反。在异常消息中我同时收到了raiserror错误消息,以及在此之后发生的下一件事。
这是我的解决方法(无论如何,这是我的习惯),但似乎没有必要:
if @somethingBadHappened
begin;
raiserror('Something bad happened', 16, 1);
return;
end;
文档说:
这是否意味着我必须使用显式事务?
最佳答案
这是By DesignTM,正如SQL Server团队对类似问题的回答在Connect上所示:
是的,对于一些希望严重程度较高的RAISERROR
(例如16
)与SQL执行错误相同的人来说,这是一个问题,但并非如此。
解决方法只是您需要做的事情,并且使用显式事务不会对您要更改的行为产生任何影响。
关于sql - 为什么当xact_abort打开时,Sql Server在raiserror之后仍继续执行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/76346/