6

ROLLBACK を使用せずにトランザクションの以前の状態にロールバックする方法はありますBEGIN TRANSACTIONか?

delete from table1;
ROLLBACK

メッセージ:

ROLLBACK TRANSACTION 要求には、対応する BEGIN TRANSACTION がありません。

任意の入力は非常に役立ちます。

ありがとう !!!

4

3 に答える 3

6

IMPLICIT_TRANSACTIONSを明示的にオンに設定したときにgerrytansの回答を拡張するには、ROLLBACKを使用できます。これに関連するMSDNドキュメントを参照してください。これはデフォルトの自動コミットトランザクションモードではないことに注意してください。

これにより、次のようなステートメントを実行できます。

SET IMPLICIT_TRANSACTIONS ON

INSERT INTO my_table (item_type, start_date_time)
VALUES ('TEST', CURRENT_TIMESTAMP)

ROLLBACK

-- Shouldn't return the 'TEST' value inserted above.
SELECT * FROM my_table ORDER BY start_date_time DESC 
于 2013-01-23T05:43:31.250 に答える
4

SQL サーバー エラーが示すように、できません。そして、多くの人は、そもそもなぜそれが必要なのか知りたがるでしょう。

SQL サーバーには暗黙的なトランザクションがあることに注意してください。つまり、明示的な BEGIN TRAN なしで発行する DML の場合、SQL サーバーは画面の背後でトランザクションを開始および終了します。

ROLLBACK の一般的な使用法は、エラー処理です。トランザクションの途中で、不適切なユーザー入力やその他の理由により先に進めないことに気付いた場合、合理的なアクションは ROLLBACK して開始点に戻ることです。

起こりうる最悪の事態は、データの状態を「中間のどこか」に置いておくことです。

于 2013-01-23T05:19:31.227 に答える
3

コマンドBEGIN TRANSACTIONを使用するには、 が必要です。ROLLBACK前の状態に戻ることはできません。

于 2013-01-23T05:09:28.913 に答える