【问题标题】:sql transaction don't roll backsql事务不回滚
【发布时间】:2012-07-13 22:41:07
【问题描述】:

在transact-sql中,在“开始事务”和“提交事务”之间包含不同动作的目的是什么

我注意到,当函数中间抛出异常时,它不会回滚事务。 如果发生错误,如何回滚事务?

【问题讨论】:

    标签: sql-server commit rollback


    【解决方案1】:

    使用 try 和 catch 进行正确错误处理的最佳方法。然后根据错误在 catch 子句中执行操作,例如回滚 tran 等。

    但是,如果您根本不想更改代码。请在执行代码之前指定以下内容。

    set xact_abort on
    

    这将导致事务自动回滚。但最好的解决方案是正确捕获和处理错误。

    【讨论】:

    • 谢谢!知道为什么它不是 sql server 中的默认行为吗?听起来合乎逻辑,如果我在一个事务中,你必须要么全部运行,要么什么都不运行。
    • 是的。对我来说这听起来也很合乎逻辑,但事实并非如此。可能是由于某种历史原因。
    • @Martin 因为默认行为是遵循 sql 标准。
    • SSMS 2014 忽略了这一点。我的脚本失败并且没有回滚。无法再次运行我的脚本,因为修改后的对象不在原始状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多