我只是对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/

10-11 10:46