Linkexpress Transactional Replication option説明書
目次 索引 前ページ次ページ

付録A TRO> A.3 トリガによるユーザ独自の編集について> A.3.4 SQL Serverデータベースの場合

A.3.4.2 定義例

SQL Serverデータベースにおける、INSERT文に対するトリガの定義例を説明します。

■格納データの加工(種別:AFTER)

◆EXTRACT定義文のSELECTオペランドの定義例

SELECT =(( @TRHEADER ),
   ( @DBOP ),
   ( ITEM01 ),
   ( ITEM02 ),
   ( @CONST(0,sint) )
   )

判定用の列として項目追加"@CONST(0,sint)"を指定します。この項目追加に対応する、格納側の表における列の属性はsintです。

◆OUTTABLE定義文のITEMオペランドの定義例

ITEM =( @TRHEADER,
  @DBOP,
  ITEM01,
  ITEM02,
  CHK
  )

EXTRACT定義文のSELECTオペランドで指定した項目追加に対応する、判定用の列CHKを指定します。

◆INSERT文に対するトリガの定義例

CREATE TRIGGER [TRIG1] ON [link].[CADMY01]
AFTER INSERT
AS
BEGIN
  DECLARE @NewItem1 int, @NewItem2 int
  SELECT @NewItem1= ITEM01, @NewItem2=ITEM02 from inserted

  SET @NewItem2 = @NewItem2 + 3 -- 加工
  -- 加工のためのUPDATE文を発行
  -- CHKは判定用の列。INSERT文に対するトリガから発行したことを示す値を指定
  UPDATE CADMY01 SET ITEM02=@NewItem2, CHK1=1 WHERE ITEM01=@NewItem1
END

論理表insertedからキーおよび加工対象の列を取得するSELECT文を発行し、それぞれの列の値を変数に代入します。加工後、表TBL1に対して加工済の値および判定用の列を更新対象として指定したUPDATE文を発行します。

◆UPDATE文に対するトリガの定義例

CREATE TRIGGER [TRIG2] ON [link].[CADMY01]
AFTER UPDATE
AS
BEGIN
  DECLARE @NewItem1 int, @NewItem2 int, @Chk int
  SELECT @NewItem1= ITEM01, @NewItem2=ITEM02, @Chk=CHK from inserted
  IF(@Chk < 1) -- 判定用の列を判定
    BEGIN
      SET @NewItem2 = @NewItem2 + 3 -- 加工
      -- 加工のためのUPDATE文を発行
      -- CHKは判別用の列。UPDATE文に対するトリガから発行したことを示す値を指定
      UPDATE CADMY01 SET ITEM02=@NewItem2, Chk=2 WHERE ITEM01=@NewItem1
    END
END

論理表insertedからキー、加工対象の列および判定用の列を取得するSELECT文を発行し、それぞれの列の値を変数に代入します。判定用の列を判定し、トリガから発行されていなければ加工対象として扱います。この例では、判定用の列の値が1以上の場合、トリガから発行されていると判定します。加工対象の場合は加工後、表TBL1に対して加工済の値および判定用の列を指定したUPDATE文を発行します。

■格納処理の迂回(種別:AFTER)

◆トリガの定義例

CREATE TRIGGER [TRIG1] ON [link].[CADMY01]
AFTER INSERT
AS
BEGIN
  DECLARE @NewItem1 int, @NewItem2 int
  SELECT @NewItem1= ITEM01, @NewItem2=ITEM02 from inserted
  IF(@NewItem2 < 0) -- 迂回判定
    BEGIN
      RAISERROR(60999, 16, 1) -- エラー番号を返す
      -- INSERT文によって挿入した行を元に戻すDELETE文を発行
      DELETE CADMY01 WHERE ITEM01=@NewItem1
    END
END

論理表insertedからキーおよび迂回判定に使う列を取得するSELECT文を発行し、それぞれの列の値を変数に代入します。迂回条件を満たす場合、エラー番号60999を返したあと、INSERT文によって挿入した行を元に戻すDELETE文を発行して終了します。


目次 索引 前ページ次ページ

Copyright FUJITSU LIMITED 2007-2009