相关疑难解决方法(0)

当xact_abort打开时,为什么Sql Server在raiserror之后继续执行?

我对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语句引发运行时错误,则终止并回滚整个事务.

这是否意味着我必须使用显式交易?

sql t-sql sql-server

85
推荐指数
4
解决办法
5万
查看次数

标签 统计

sql ×1

sql-server ×1

t-sql ×1