web-dev-qa-db-ja.com

トリガーがINSERT、UPDATE、またはDELETEステートメントで起動するかどうかを確認するにはどうすればよいですか?

トリガーがINSERT、UPDATE、またはDELETEステートメントをターゲットにしているかどうかをどのように判断しますか?

チェックインしましたsys.triggersそして、トリガーが起動する操作に関連するものは何も表示されません。

11
George.Palacios

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です。

typesys.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';
12
George.Palacios