2011-04-26 76 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