2011-04-26 46 views
4

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

我知道有其他questiones这样的SO,​​但我还没有看到一个具体的2008 R2,因此我可以得到相同的答案,如果是这样的话,那么我们可以关闭这个线程。

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

UPDATE myTable SET col1=somevalue WHERE.... 

回答

6

当然你也可以使用显式的交易,如

BEGIN TRAN 
UPDATE ... 
ROLLBACK 

,但我不认为你是问有关?

如果你可以选择SET IMPLICIT_TRANSACTIONS ON那么该命令将不会被提交或回滚,直到你明确地这样做,但这不是默认行为。

默认情况下,交易是汽车致力于所以当命令成功完成了更新的结果将被提交。如果更新遇到错误 - 包括连接被中止更新,它会自动回滚。

1

如果您的数据库是完全恢复模式,你可能想尝试读取事务日志,发现其行受到影响,然后恢复更新。

但是,这不是默认支持的,因为MS存储事务日志在自己的格式不有据可查。

解决方案是使用诸如DBCC LOG或fn_log之类的命令或第三方工具,如ApexSQL Log,它会自动执行所有这些操作,但会附带价格。

如果您需要更多的细节,这里是情侣阅读事务日志帖子:

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

SQL Server Transaction Log Explorer/Analyzer