• ベストアンサー

トリガーの設定方法

いま、まったく同じ型のTABLE1,TABLE2の2つのテーブルがあり、 TABLE1にInsertやUpdateがかかると、自動的にTABLE2の方にも 同じようなInsertやUpdateが走る仕組みを作りたいと考えています。 TABLE1にトリガーを設定すれば可能ということは判ったのですが、 どのようにトリガーを記述すればわからず、困っています。 特に、「AS」以降の記述方法が判りません。 TABLE1にかかったクエリを同じようにTABLE2にもかかるように するにはどのように記述すればいいのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

トリガを利用すると、そのトリガがかかったテーブルに対する「クエリの結果」を知ることはできますが、「クエリの内容」まで知ることはできません。 例えば「クエリの結果」がテーブルの最初の1行になるようなクエリを考えてください。そのような結果を得られるクエリは何通りも考えられるわけですが、そのうちどのクエリを実行してトリガが実行されたのかを判別することはできません。 ですので、トリガを使用して、全く同じクエリを他のテーブルに対して実行することはできません。 しかし「クエリの結果」は分かりますので、例えば「主キーを共有しており一方への追加・削除は他方へも反映したい」というような場合には、クエリの結果を使用して他のテーブルに対して処理を行うことはできます。(クエリの結果は、トリガ内だけで使用できるinsertedとdeletedという特殊なテーブルを使用します。)

その他の回答 (1)

  • 9arabi
  • ベストアンサー率32% (140/433)
回答No.2

ちょっと自信がないのですが、リレーションはることでできませんでしたっけ? トリガは、No1さんのいわれるとおり、insertedとdeletedという一時テーブルを使うのですが、 updateが走ったとき、deleted+insertedを使います。 なので、 FOR INSERTのときには insert into TABLE2 select * from inserted とか FOR DELETEのときには detete TABLE2 where 主キー = (select 主キー from deleted) とか、そんなかんじで使います。 でも、あんまり頻繁に更新がかかるようなら、とても重くなったはずなので、あんまりオススメしません。 プログラム側で、同じように更新をかけに行くようにするか、リレーション(自信ないですが)かなと思います その線で一度みてみてください

関連するQ&A