2011-10-19 12 views
7

異なる名前のテーブルの下に両方の挿入トリガが表示されているように見えますが、これらは許可されているようです。それは一般的な行為か悪い行為ですか?私はSQL Server 2005を使用しています同じテーブルに2つの異なる挿入トリガを設定できますか?

+0

トリガーは何をしますか? INSERTEDテーブルは索引付けされていないので、パフォーマンス上の理由からそれらを統合する方が良いかもしれません。 –

答えて

11

はい、操作ごとに複数のトリガーを設定できます。 AFTER INSERTまたはAFTER UPDATEなどです。別々の懸念事項を別々の小さく管理しやすいコードに分割するのは意味があります。

あなたが頼りにできないことは、それらが特定の順序で実行されるということです。トリガーが実際に実行される順序も安定している必要はなく、毎回同じです。

+3

RDBMSに依存します。 Postgresは、複数のトリガが名前のアルファオーダーで呼び出されることを保証します。彼らは、SQL標準(めったに従わない)が作成順であると述べている。 –

+1

@AndrewLazarus:私はSQL Serverを指していました(OPはそれについて尋ねたので、SQL Serverにはそのような機能はありません)。それを指摘してくれてありがとう! –

+0

絶対に。私はしばしば、人々がGoogleからここにたくさん来ていると思うようなメモを追加します。 –

2

時間の経過とともに小さな(敏捷性の)チャンクに変更を分解し、それらを互いに独立して追加または削除することができます。

+0

私は一度に2つ以上の行を挿入すると(基本的にレコードの束をインポートしています)、各挿入を参照する方法があるのでしょうか、トリガーはすべての挿入に対して自動的に実行されますか? –

+1

@hmdトリガーは、バルク挿入を使用していない限り、1回の挿入ごとに自動的に実行され、バルク挿入コマンドごとに1回トリガーが実行されます。 – Niraj

+0

これは古い質問です!トリガでは、挿入したばかりの行(挿入トリガの1つ以上の行)を含む「挿入済み」という表をいつでも参照できます。また、カーソルを作成することで、それぞれの行をループして、必要に応じて処理することができます。 – olf

関連する問題