SQL Engine Reference (v11)

ROLLBACK

ROLLBACK は、データベースを現行トランザクションが開始される前の状態に戻します。このステートメントにより、最後に行った SAVEPOINT または START TRANSACTION 以降に取得したロックを解放します。

ROLLBACK TO SAVEPOINT ステートメントは、指定されたセーブポイントまでトランザクションをロールバックします。

構文

ROLLBACK [WORK] [TO SAVEPOINT セーブポイント名] 
 
セーブポイント名 ::= ユーザー定義名 

備考

AUTOCOMMIT がオフの場合、ROLLBACKSAVEPOINT、およびRELEASE はセッション レベル(ストアド プロシージャの外部)でのみサポートされます。そうでない場合、ROLLBACKSAVEPOINT、およびRELEASE はストアド プロシージャ内で使用しなければなりません。

ストアド プロシージャ内でコミットされたステートメントは、呼び出し元の ODBC アプリケーションの一番外側のトランザクションによって制御されます。これはつまり、SQLSetConnectOption で指定された AUTOCOMMIT モードに従って、ODBC アプリケーションから外部的に呼び出しているストアド プロシージャが、2 種類ある動作のうち 1 つを実行するということです。自動的にコミットする(AUTOCOMMIT がオン、デフォルト)か、SQLTransact が SQL_COMMIT または SQL_ROLLBACK で呼び出されるのを待つ(AUTOCOMMIT がオフに設定されている場合)のいずれかです。

ネストされたトランザクションの場合、ROLLBACK は一番近い START TRANSACTION までロール バックします。たとえば、トランザクションが 5 レベルまでネストされている場合、すべてのトランザクションを元に戻すには 5 つの ROLLBACK ステートメントが必要になります。トランザクションは、コミットされるかロール バックされるかのいずれかで、両方はされません。つまり、コミットされたトランザクションをロール バックすることはできません。

次のステートメントによって、トランザクションが開始されてからデータベースに加えられた変更が元に戻ります。

ROLLBACK WORK; 

次のステートメントによって、Svpt1 と名付けられた最後のセーブポイントからデータベースに加えられた変更が元に戻ります。

ROLLBACK TO SAVEPOINT Svpt1; 

関連項目

COMMIT

RELEASE SAVEPOINT

SAVEPOINT


REVOKE

SAVEPOINT