21

SQL Server 2005 で UPDATE クエリをロールバックするにはどうすればよいですか?

コードではなく、SQL でこれを行う必要があります。

4

10 に答える 10

34
begin transaction

// execute SQL code here

rollback transaction

クエリを既に実行しており、それをロールバックしたい場合、残念ながら唯一の現実的なオプションは、データベースのバックアップを復元することです。完全バックアップを使用している場合は、データベースを特定の時点に復元できるはずです。

于 2009-04-06T13:38:46.480 に答える
29

このツールが必要で、トランザクションを見つけて元に戻すことができます。

ApexSQLログ

于 2009-04-06T13:46:52.450 に答える
5

トランザクション内で実行したステートメントをロールバックできます。トランザクションをコミットする代わりに、トランザクションをロールバックします。

何かを更新してそれらの更新をロールバックしたいが、(まだコミットされていない) トランザクション内でこれを行っていない場合は、運がいいと思います...

(手動で修復、またはバックアップを復元)

于 2009-04-06T13:38:37.773 に答える
1

更新がコミットされると、単一の更新だけをロールバックすることはできません。最善の策は、データベースの以前のバックアップにロールバックすることです。

于 2009-04-06T13:40:29.580 に答える
1

指定した情報から、回復の可能性が最も高いのはデータベースのバックアップです。当時は明らかにトランザクションを使用していなかったため、プッシュした変更をロールバックすることはできないと思います。

于 2009-04-06T13:41:05.617 に答える
1

簡単にできます:

ヘッダーコード...

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

...

于 2013-01-09T17:53:59.930 に答える
0

すでに述べたように、バックアップから復元する以外にできることはありません。少なくともこれで、コミットを決定する前に何が起こるかを確認するために、常にステートメントをトランザクションにラップすることを学びました。また、データベースのバックアップがない場合は、データベースの定期的なバックアップを作成することも教えてくれます。

当面の問題についてはあまり役に立ちませんでしたが...うまくいけば、これらの回答により、将来この問題に遭遇しないことが保証されます.

于 2009-04-06T13:50:19.477 に答える
-3

試す

ROLLBACK WORK;

通常は機能します

于 2012-07-31T02:20:30.610 に答える