連載
» 2008年03月24日 00時00分 公開

トランザクション処理をさらっとマスターしようさらっと覚えるSQL&T-SQL入門(12)(2/3 ページ)

[石橋潤一,株式会社システムインテグレータ]

トランザクションの構文

 トランザクションを利用する際の構文は、大きく分けて3つ存在します。

  1. トランザクション開始の宣言
  2. 処理の確定
  3. 処理の取消

 1は開始宣言なので、とくに問題ないでしょう。23はどちらもトランザクションの終了時の手続きです。2は処理が成功した場合に処理全体を確定します。3は処理が失敗した場合にトランザクションを取り消して処理前の状態に戻します。

 処理を確定する場合(2)にはCOMMIT文を実行します。一方、データベースに対する変更処理をすべて取り消す場合(3)は、ROLLBACK文を実行します。

 ここで注意したいのは、COMMIT文が実行されると、ROLLBACK文による処理の取消を行うことができなくなる点です。このため、処理の取消を行う場合は、COMMIT文の発行を行う前にROLLBACK文を実行する必要があります。では、順を追って見ていきましょう。

1. トランザクション開始の宣言

 トランザクションの開始を宣言する構文は次のとおりです。

 BEGIN TRANSACTION[TRAN] [トランザクション名]


 BEGIN TRANの宣言によって、トランザクションが開始されます。「TRANSACTION」を「TRAN」と略すこともできます。また、トランザクションを入れ子にする場合などでは、トランザクション名を指定します。

 このトランザクションの宣言から、処理の確定、もしくは取消の間までに発行されるDML文(INSERT、UPDATE、DELETE)が1つのトランザクションとして取り扱われます。

2. 処理の確定

 COMMIT文の構文は次のとおりです。

  COMMIT TRANSACTION[TRAN] [トランザクション名]


3. 処理の取り消し

 ROLLBACK文の構文は次のとおりです。

 ROLLBACK TRANSACTION[TRAN] [トランザクション名]


 ROLLBACK文の発行を行うためには、トランザクションとして実行したデータ更新処理に関する失敗を検知する必要があります。1つのトランザクションの中では複数のDML文が発行されることになりますが、これらのエラーを検知するためには、次に紹介するTRY〜CATCH文を利用します。

TRY〜CATCH文によるエラー検知

 TRY〜CATCH文は、C#などでおなじみの例外処理を、ストアドプロシージャの中で実現するための命令文です。

 トランザクションを利用する場合の具体的な構文は次のとおりです。

BEGIN TRY

  BEGIN TRANSACTION    --トランザクションの開始

    (DML文の発行)

  COMMIT TRANSACTION    --トランザクションを確定

END TRY

BEGIN CATCH           --例外処理

  ROLLBACK TRANSACTION   --トランザクションを取り消し

END CATCH


 BEGIN TRY〜END TRYブロックの中で実行される命令文について、エラーが発生した場合は処理を中断し、BEGIN CATCH〜END CATCHブロックで定義された命令文を実行します。上記の例であれば、DML文の実行時にエラーが発生した場合、ROLLBACKが実行されることになります。

 トランザクション利用に際する構文が分かったところで、早速ストアドプロシージャでトランザクションを利用してみましょう。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。