トランザクション処理をさらっとマスターしよう:さらっと覚えるSQL&T-SQL入門(12)(3/3 ページ)
アプリケーション開発でデータベースを利用する新人プログラマに向けて、SQLおよびT-SQLを短期間で理解できるよう、開発現場ですぐに必要となる内容を中心に解説する。(編集部)
トランザクションを組み込んだストアドプロシージャの作成
ストアドプロシージャの作成にあたって利用するデータベースはいつもと同じ、SQL Server 2005のサンプルデータベースであるAdventureWorksを利用します。
今回作成するストアドプロシージャは、「Employee」および「Contact」テーブルから氏名、役職を取り出し、データを新しいテーブルに挿入していく、という内容です。
テーブルの作成
ストアドプロシージャ作成の前に、次の内容のテーブルをAdventureWorksに加えてください。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ストアドプロシージャの作成、実行
続いて、ストアドプロシージャの作成に入りましょう。
作成するストアドプロシージャは、前回の記事で作成したサンプルを拡張した内容になっているため、前回のサンプルが残っている方は、その内容を拡張しても良いでしょう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
作成したストアドプロシージャを実行すると、TranTestテーブルに対してデータの追加が行われます。
ロールバック処理の検証
ここでは、実際にロールバックが正しく動作しているか確認するために、TranTestに対して手入力で次のデータを登録してから、プロシージャを実行してみましょう。手入力したデータによって、ストアドプロシージャ実行時にPRIMARY KEY違反が発生するはずです。
列名 | 値 | |
---|---|---|
EmployeeID | 77 | |
FirstName | atmark | |
LastName | IT | |
Title | WebMaster |
上記データがTranTestに存在する状態でストアドプロシージャを実行すると、次のような結果となります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
PRIMARY KEY違反が発生し、ロールバックが行われています。実際にTranTestを確認してみると、1行もデータが追加されていないことが確認できます。
TranTestからデータを消去したうえで再度ストアドプロシージャを実行すると、処理が正常に終了し、INSERT文によるデータ追加がすべてコミットされます。
まとめ
以上のように、トランザクションを利用することによって、一連の処理を1つのまとまりとして扱い、データの整合性を保ちながらデータの更新処理を行うことができます。複数のDML文を発行するような場合は必須と言える技術であるため、その特性をしっかりと把握しておきましょう。
とうとうこの連載も、これで最後のまとめになります。1年前から始まった本連載ですが、読者のみなさんの学習の助けになったでしょうか?
SQLはとても奥が深く、それでいてとても使いやすい言語です。難しい概念や難解な構文もたくさんありますが、実際に手で書き、目で動きを追ってみると、理解できないものではありません。本連載をきっかけとして、みなさんがSQLを極める最初の一歩となれば幸いです。
1年間ご愛読ありがとうございました! それでは、また新しい記事でお会いしましょう!(連載完)
筆者プロフィール
石橋潤一
株式会社システムインテグレータ勤務。Web+DBの業務アプリをメインに開発に携わる。@IT連載記事「SQL Server 2005を使いこなそう」「SQL Server 2005 CTPレビュー」執筆のほか、著書に『DBマガジン別冊 SQL Server 2005徹底活用ガイド』(翔泳社刊/共著)、『ASP.NET+SQL Server ゼロからはじめるWebアプリケーション』(ソフトバンクパブリッシング刊/共著)。
Copyright © ITmedia, Inc. All Rights Reserved.