【问题标题】:How to rollback SQL update command?如何回滚 SQL 更新命令?
【发布时间】:2011-04-26 07:17:53
【问题描述】:

在 SQL Server 2008 R2 中。是否可以对单个更新命令进行回滚?

我知道在 SO 上还有其他类似的问题,但我还没有看到特定于 2008 R2 的问题,因此我可能会得到相同的答案,如果是这样,那么我们可以关闭这个帖子。

我做了一个简单的更新,没有任何交易命令:

UPDATE myTable SET col1=somevalue WHERE....

【问题讨论】:

    标签: sql-server sql-server-2008 rollback


    【解决方案1】:

    当然你可以使用显式事务,例如

    BEGIN TRAN
    UPDATE ...
    ROLLBACK
    

    但我不认为你在问这个?

    如果您有选项SET IMPLICIT_TRANSACTIONS ON,那么在您明确执行此操作之前,该命令将不会被提交或回滚,但这不是默认行为。

    默认情况下,事务是自动提交的,因此当命令成功完成时,更新的结果将被提交。如果更新遇到错误 - 包括在更新过程中被终止的连接,它将自动回滚。

    【讨论】:

      【解决方案2】:

      如果您的数据库处于完全恢复模式,您可能需要尝试读取事务日志,找出受影响的行,然后恢复更新。

      但是,默认情况下不支持此功能,因为 MS 以自己的格式存储事务日志,没有很好的文档记录。

      解决方案是使用诸如 DBCC LOG 或 fn_log 之类的命令或诸如 ApexSQL Log 之类的第三方工具,它们会自动完成所有这些操作,但需要付出一定的代价。

      如果您需要更多详细信息,这里有几篇关于阅读事务日志的帖子:

      Read the log file (*.LDF) in sql server 2008

      SQL Server Transaction Log Explorer/Analyzer

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        • 1970-01-01
        • 2013-05-14
        • 2015-10-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多