SQL Server 2005 で UPDATE クエリをロールバックするにはどうすればよいですか?
コードではなく、SQL でこれを行う必要があります。
SQL Server 2005 で UPDATE クエリをロールバックするにはどうすればよいですか?
コードではなく、SQL でこれを行う必要があります。
begin transaction
// execute SQL code here
rollback transaction
クエリを既に実行しており、それをロールバックしたい場合、残念ながら唯一の現実的なオプションは、データベースのバックアップを復元することです。完全バックアップを使用している場合は、データベースを特定の時点に復元できるはずです。
このツールが必要で、トランザクションを見つけて元に戻すことができます。
トランザクション内で実行したステートメントをロールバックできます。トランザクションをコミットする代わりに、トランザクションをロールバックします。
何かを更新してそれらの更新をロールバックしたいが、(まだコミットされていない) トランザクション内でこれを行っていない場合は、運がいいと思います...
(手動で修復、またはバックアップを復元)
更新がコミットされると、単一の更新だけをロールバックすることはできません。最善の策は、データベースの以前のバックアップにロールバックすることです。
指定した情報から、回復の可能性が最も高いのはデータベースのバックアップです。当時は明らかにトランザクションを使用していなかったため、プッシュした変更をロールバックすることはできないと思います。
簡単にできます:
ヘッダーコード...
Set objMyConn = New ADODB.Connection
Set objMyCmd = New ADODB.Command Set
objMyRecordset = New ADODB.Recordset
On Error GoTo ERRORHAND
作業コード...
objMyConn.ConnectionString = ConnStr
objMyConn.Open
コード....
「Excel からデータをコピー」
objMyConn.BeginTrans <-- define transactions to possible be rolled back
For NewRows = 2 To Rows
objMyRecordset.AddNew
For NewColumns = 0 To Columns - 1
objMyRecordset.Fields(NewColumns).Value = ActiveSheet.Cells(NewRows, NewColumns + 1)
Next NewColumns objMyRecordset.Update Next NewRows
objMyConn.CommitTrans <- if success, commit them to DB
objMyConn.Close
エラーハンド:
Success = False
objMyConn.RollbackTrans <-- here we roll back if error encountered somewhere
LogMessage = "ERROR writing database: " & Err.Description
...
すでに述べたように、バックアップから復元する以外にできることはありません。少なくともこれで、コミットを決定する前に何が起こるかを確認するために、常にステートメントをトランザクションにラップすることを学びました。また、データベースのバックアップがない場合は、データベースの定期的なバックアップを作成することも教えてくれます。
当面の問題についてはあまり役に立ちませんでしたが...うまくいけば、これらの回答により、将来この問題に遭遇しないことが保証されます.
試す
ROLLBACK WORK;
通常は機能します