SQL CRLのトリガーを使った導出属性作成のサンプル

データベースの導出属性を作成する方法はいくつかあるが、SQL Serverの場合C#やVB.NETでトリガが作れるのでサンプルを作ってみた。サンプルは、親子関係があるテーブルで子テーブルが変化すると、親テーブルも更新される単純なものである。具体的には、売上ヘッダーテーブル(Sales)と売上明細テーブル(SalesDetail)間に外部キーによる親子関係があり、売上明細テーブルのレコードをINSERT、UPDATE、DELETEのいずれかを行うと、売上ヘッダーテーブルの売上合計が再計算されるものである。

テーブルのレイアウトは次の通り。


作成手順は以下の通り。

  1. [ファイル]-[新規作成]-[プロジェクト]を選び、任意の言語の[データベース]から[SQL Server プロジェクト]を選択する。


  2. 次に、データベースプロジェクトが操作するデータソースを選択する。なければ新規作成する
  3. ソリューションエクスプローラを右クリックし、[追加]-[トリガ]を選ぶ


  4. サンプルコードをビルドして、[ビルド]-[配置]が成功すると、SQL Server Management Studioでトリガが登録されていることが確認できる。

  5. Salesテーブル、SalesDetailテーブルに適当なデータをINSERTすると、自動的にSalesテーブルのTotalPriceが計算される。同様にUPDATE、DELETEするとTotalPriceが計算される。

以下は、C#のトリガのソースコードである。

この程度の更新ならアプリケーションで計算してUPDATEすることは簡単であるが、単純な集計処理がない分ソースコードは見やすくなる。また、トリガなのでアプリケーション以外から更新した場合でも、自動的にトータルプライスが計算されるので便利である。トリガで導出属性を作成するメリットは、リアルタイムで作成できる点である。デメリットは、データベースの負荷が多少かかる点である。

トラックバック

トラックバックURL:
http://www.apricot-jp.com/cgi/mt/mt-tb.cgi/351

関連情報

Copyright(C) 2007 アーキテクト360 Allrights reserved.