SQL Serverデータベースにおける、トリガの利用方法および定義例を説明します。
SQL Serverデータベースにおけるトリガの利用方法を説明します。
格納データの加工(種別:AFTER)
論理表insertedからキーおよび加工対象の列を取得するSELECT文を発行し、加工対象の変数の値を加工します。その後、加工結果を反映したSQL文を発行します。ただし、トリガ内で発行するSQL文から再びトリガが実行され、加工済みの値がさらに加工されるのを防ぐため、判定用の列が必要です。たとえば、次のように行います。EXTRACT定義文のSELECTオペランドに、初期値として0の項目を追加します。また、OUTTABLE定義文のITEMオペランドに判定用の列を指定します。INSERT文に対するトリガでは、加工のためのUPDATE文を発行するときに、判定用の列の値として1を指定します。UPDATE文に対するトリガでは、判定用の列を判定し、0以外ならばトリガから発行したUPDATE文なので、加工対象外として扱います。
格納処理の迂回(種別:AFTER)
論理表insertedからすべての列を取得するSELECT文を発行します。迂回条件を満たす場合、エラー番号60999/重大度レベル16を返し、トリガの対象となるSQL文の処理を元に戻すためのSQL文を発行します。
SQL Serverデータベースにおける、INSERT文に対するトリガの定義例を説明します。
格納データの加工(種別:AFTER)
SELECT =(( @TRHEADER ), |
判定用の列として項目追加”@CONST(0,sint)”を指定します。この項目追加に対応する、格納側の表における列の属性はsintです。
ITEM =( @TRHEADER, |
EXTRACT定義文のSELECTオペランドで指定した項目追加に対応する、判定用の列CHKを指定します。
CREATE TRIGGER [TRIG1] ON [link].[CADMY01] |
論理表insertedからキーおよび加工対象の列を取得するSELECT文を発行し、それぞれの列の値を変数に代入します。加工後、表TBL1に対して加工済の値および判定用の列を更新対象として指定したUPDATE文を発行します。
CREATE TRIGGER [TRIG2] ON [link].[CADMY01] |
論理表insertedからキー、加工対象の列および判定用の列を取得するSELECT文を発行し、それぞれの列の値を変数に代入します。判定用の列を判定し、トリガから発行されていなければ加工対象として扱います。この例では、判定用の列の値が1以上の場合、トリガから発行されていると判定します。加工対象の場合は加工後、表TBL1に対して加工済の値および判定用の列を指定したUPDATE文を発行します。
格納処理の迂回(種別:AFTER)
CREATE TRIGGER [TRIG1] ON [link].[CADMY01] |
論理表insertedからキーおよび迂回判定に使う列を取得するSELECT文を発行し、それぞれの列の値を変数に代入します。迂回条件を満たす場合、エラー番号60999を返したあと、INSERT文によって挿入した行を元に戻すDELETE文を発行して終了します。