SQL Serverでは、sys.trigger_event_types
を使用できます。 トリガーが発生する可能性のあるすべてのイベントまたはイベントグループを返します。
例1-小さなサンプル
ここでは、TOP()
を使用します ビューから最初の10行を返す句。
SELECT TOP(10) * FROM sys.trigger_event_types;
結果:
+--------+-------------------+---------------+ | type | type_name | parent_type | |--------+-------------------+---------------| | 21 | CREATE_TABLE | 10018 | | 22 | ALTER_TABLE | 10018 | | 23 | DROP_TABLE | 10018 | | 24 | CREATE_INDEX | 10020 | | 25 | ALTER_INDEX | 10020 | | 26 | DROP_INDEX | 10020 | | 27 | CREATE_STATISTICS | 10021 | | 28 | UPDATE_STATISTICS | 10021 | | 29 | DROP_STATISTICS | 10021 | | 34 | CREATE_SYNONYM | 10022 | +--------+-------------------+---------------+
すべての行を選択すると、SQL Server 2017を使用すると284になり、SQLServer2019で291になります。
例2–親を取得する
sys.trigger_event_types
の結果をよく見ると 、DDLトリガーイベントが階層的であることがわかります。
CREATE_TABLE
の階層を示す例を次に示します。 イベントをトリガーします。
WITH event_types(Type, Type_Name, Parent_Type, Level) AS ( SELECT type, type_name, parent_type, 1 AS level FROM sys.trigger_event_types WHERE type_name = 'CREATE_TABLE' UNION ALL SELECT tet.type, tet.type_name, tet.parent_type, et.level + 1 AS level FROM event_types AS et JOIN sys.trigger_event_types AS tet ON et.parent_type = tet.type ) SELECT Type, Type_name, Parent_Type FROM event_types ORDER BY level DESC;
結果:
+--------+---------------------------+---------------+ | Type | Type_name | Parent_Type | |--------+---------------------------+---------------| | 10001 | DDL_EVENTS | NULL | | 10016 | DDL_DATABASE_LEVEL_EVENTS | 10001 | | 10017 | DDL_TABLE_VIEW_EVENTS | 10016 | | 10018 | DDL_TABLE_EVENTS | 10017 | | 21 | CREATE_TABLE | 10018 | +--------+---------------------------+---------------+
DDL_EVENTS
であることがわかります 階層の最上位にあり、その後にDDL_DATABASE_LEVEL_EVENTS
が続きます。 、など、CREATE_TABLE
に到達するまで 。
それを視覚化する別の方法は次のようになります:
DDL_EVENTS > DDL_DATABASE_LEVEL_EVENTS > DDL_TABLE_VIEW_EVENTS > DDL_TABLE_EVENTS > CREATE_TABLE
CREATE_TABLE
を置き換えることができます 他のイベントタイプを使用したクエリで、その階層を確認します。
トリガーイベントタイプの階層リストを返すには、SQLServerでトリガーイベントタイプの階層リストを返すクエリも参照してください。