トリガーがINSERT、UPDATE、またはDELETEステートメントをターゲットにしているかどうかをどのように判断しますか?
チェックインしましたsys.triggers
そして、トリガーが起動する操作に関連するものは何も表示されません。
sys.triggers
テーブルはこのデータを公開せず、代わりに2つのオプションがあります。
[〜#〜] objectproperty [〜#〜]
[〜#〜] objectproperty [〜#〜] メタデータ関数を使用して、以下のようにアクションをプロパティとして返すことができます。
OBJECTPROPERTY(object_id, 'ExecIsUpdateTrigger')
OBJECTPROPERTY(object_id, 'ExecIsInsertTrigger')
OBJECTPROPERTY(object_id, 'ExecIsDeleteTrigger')
これは、その特定のアクションでトリガーが起動するかどうかを示す単純なビット値を返します。
sys.trigger_events
the docs のとおり、これにはトリガーが起動するイベントごとの行が含まれます。具体的には、対象となる列はtype
およびtype_desc
です。
type
はsys.trigger_event_types
テーブルの外部キーです-type_desc
にはtype_name
テーブルのsys.trigger_event_types
列が含まれているようです。
このデータは、次のスクリプトを使用して返すことができます。
SELECT
[o].[name]
,[t].[type_desc]
FROM
[sys].[trigger_events] AS [t]
INNER JOIN [sys].[objects] AS [o] ON
[o].[object_id] = [t].[object_id]
WHERE
[o].[name] = 'TriggerNameHere';