イベント通知とトリガについて
次の表では、トリガとイベント通知の比較対照を示します。
トリガ |
イベント通知 |
---|---|
DML トリガは DML (データ操作言語) イベントに応答します。DDL トリガは DDL (データ定義言語) イベントに応答します。 |
イベント通知は、DDL イベントと SQL トレース イベントのサブセットに応答します。 |
トリガでは、Transact-SQL または CLR (共通言語ランタイム) マネージ コードを実行できます。 |
イベント通知ではコードは実行されません。代わりに、Service Broker サービスに xml メッセージが送信されます。 |
トリガを起動させるトランザクションのスコープ内では、トリガは同期的に処理されます。 |
イベント通知は非同期に処理され、イベント通知を発生させるトランザクションのスコープ内では実行されません。 |
トリガのコンシューマは、トリガを起動させるイベントに緊密に結び付けられます。 |
イベント通知のコンシューマは、イベント通知を起動させるイベントからは切り離されます。 |
トリガは、ローカル サーバーで処理される必要があります。 |
イベント通知はリモート サーバーで処理できます。 |
トリガはロールバックできます。 |
イベント通知はロールバックできません。 |
DML トリガ名はスキーマによってスコープが設定されます。DDL トリガ名は、データベースまたはサーバーによってスコープが設定されます。 |
イベント通知名は、サーバーまたはデータベースによってスコープが設定されます。QUEUE_ACTIVATION イベントのイベント通知は、特定のキューにスコープが設定されます。 |
DML トリガは、トリガが適用されるテーブルと同じ所有者に所有されます。 |
キュー上のイベント通知の所有者は、イベント通知が適用されるオブジェクトとは所有者が異なる場合があります。 |
トリガでは、EXECUTE AS 句がサポートされます。 |
イベント通知では、EXECUTE AS 句はサポートされません。 |
DDL トリガ イベント情報を、EVENTDATA 関数を使用してキャプチャできます。EVENTDATA 関数では xml データ型が返されます。 |
イベント通知では、xml イベント情報が Service Broker サービスに送信されます。情報は、EVENTDATA 関数と同じスキーマにフォーマットされます。 |
sys.triggers カタログ ビューと sys.server_triggers カタログ ビューに、トリガに関するメタデータがあります。 |
sys.event_notifications カタログ ビューと sys.server_event_notifications カタログ ビューに、イベント通知に関するメタデータがあります。 |