如何回滚SQL更新命令?

时间:2011-04-26 07:17:54

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

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

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

我做了一个没有任何事务命令的简单更新:

UPDATE myTable SET col1=somevalue WHERE....

2 个答案:

答案 0 :(得分:6)

当然,您可以使用显式交易,例如

BEGIN TRAN
UPDATE ...
ROLLBACK

但我认为你不是在问这个问题吗?

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

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

答案 1 :(得分:1)

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

但是,默认情况下不支持此操作,因为MS以自己的格式存储了事务日志,但没有详细记录。

解决方案是使用DBCC LOG或fn_log等命令或ApexSQL Log等第三方工具,这些工具会自动完成所有这些操作,但需要付出代价。

如果您需要更多详细信息,请阅读以下几篇关于阅读交易日志的帖子:

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

SQL Server Transaction Log Explorer/Analyzer