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でトリガーイベントタイプの階層リストを返すクエリも参照してください。