ROLLBACK を使用せずにトランザクションの以前の状態にロールバックする方法はありますBEGIN TRANSACTION
か?
delete from table1;
ROLLBACK
メッセージ:
ROLLBACK TRANSACTION 要求には、対応する BEGIN TRANSACTION がありません。
任意の入力は非常に役立ちます。
ありがとう !!!
ROLLBACK を使用せずにトランザクションの以前の状態にロールバックする方法はありますBEGIN TRANSACTION
か?
delete from table1;
ROLLBACK
メッセージ:
ROLLBACK TRANSACTION 要求には、対応する BEGIN TRANSACTION がありません。
任意の入力は非常に役立ちます。
ありがとう !!!
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
SQL サーバー エラーが示すように、できません。そして、多くの人は、そもそもなぜそれが必要なのか知りたがるでしょう。
SQL サーバーには暗黙的なトランザクションがあることに注意してください。つまり、明示的な BEGIN TRAN なしで発行する DML の場合、SQL サーバーは画面の背後でトランザクションを開始および終了します。
ROLLBACK の一般的な使用法は、エラー処理です。トランザクションの途中で、不適切なユーザー入力やその他の理由により先に進めないことに気付いた場合、合理的なアクションは ROLLBACK して開始点に戻ることです。
起こりうる最悪の事態は、データの状態を「中間のどこか」に置いておくことです。
コマンドBEGIN TRANSACTION
を使用するには、 が必要です。ROLLBACK
前の状態に戻ることはできません。