0

編集-これは元の質問から拡張されています。

別のグループに転送するために特定の情報をテーブルに送信するためのトリガーが必要です。ただし、更新時に転送する必要があるのは、T2のC4によって決定された特定のクラスのデータのみです。

create trigger Trig on T2
after Insert, update, delete
if update(C3) --DETERMINES THAT RECORD HAS BEEN UPDATED IN A MANNER THAT NEEDS TO BE  
              TRANSFERRED     
begin
if C4 != 9 return --DETERMINES IF RECORD NEEDS TO BE TRANSFERRED
else
insert P1 --BEGINS PUTTING INFORMATION INTO THE ABLE THAT IS TRANSFERRED
(C1, C2, C3)
select T1.C2, T1.C3, T2.C3 --INFORMATION THAT NEEDS TO BE TRANSFERRED
FROM T1, T2
WHERE T1.C1 = T2.C2 --T1.C1 IS A UNIQUE PRIMARY KEY THAT CONNECTS ROW IN T1 TO ROW
                      IN T2
END
GO

これは完全なテストコードです。実際のコードには、異なる名前の列が多く含まれます。すべてのテーブルデータ型は同じです。ありがとう。

4

2 に答える 2

0

INSERTEDトリガーのテーブルにアクセスしてc4列の値を取得できますが、解決しようとしている問題についてより多くの情報を提供できれば、トリガーよりも優れた代替案を提案できる可能性があります。

挿入および削除されたテーブルを使用する

DMLトリガーステートメントは、削除されたテーブルと挿入されたテーブルの2つの特別なテーブルを使用します。SQL Serverは、これらのテーブルを自動的に作成および管理します。これらの一時的なメモリ常駐テーブルを使用して、特定のデータ変更の影響をテストし、DMLトリガーアクションの条件を設定できます。テーブル内のデータを直接変更したり、CREATE INDEXなどのテーブルに対してデータ定義言語(DDL)操作を実行したりすることはできません。

DMLトリガーでは、挿入および削除されたテーブルは、主に次のことを実行するために使用されます。

  • テーブル間の参照整合性を拡張します。
  • ビューの基礎となるベーステーブルにデータを挿入または更新します。
  • エラーをテストし、エラーに基づいてアクションを実行します。
  • データ変更前後のテーブルの状態の違いを見つけ、その違いに基づいてアクションを実行します。
于 2012-08-03T16:42:00.367 に答える
0
create trigger Trig on T2
after insert, update, delete
as
 -- So that @@rowcount does not get affected by trigger code
    set NoCount on
 -- If c3 column participated in update (it most certainly did in insert)
    if update(C3)
    begin
     -- Insert or update triggered this operation
        if exists (select *
                     from Inserted)
        begin
            insert into P1 (C1, C2, C3)
            select T1.C2, T1.C3, T2.C3 --INFORMATION THAT NEEDS TO BE TRANSFERRED
            from T1
         -- Inserted is a pseudotable holding inserted/updated data
            inner join inserted T2
            on T1.C1 = T2.C2
            where T2.C4 <> 9 --DETERMINES IF RECORD NEEDS TO BE TRANSFERRED
        end
        else
     -- Separate insert for deleted records
     -- To simplify inserting additional info for deleted records only
        begin
            insert into P1 (C1, C2, C3)
            select T1.C2, T1.C3, T2.C3 --INFORMATION THAT NEEDS TO BE TRANSFERRED
            from T1
         -- deleted is a pseudotable holding deleted/updated data
            inner join deleted T2
            on T1.C1 = T2.C2
            where T2.C4 <> 9 --DETERMINES IF RECORD NEEDS TO BE TRANSFERRED
        end
    end
于 2012-08-03T22:35:46.343 に答える