In SQL Server puoi usare sys.trigger_event_types
per restituire tutti gli eventi o i gruppi di eventi su cui può essere attivato un trigger.
Esempio 1:un piccolo campione
Qui, uso il TOP()
clausola per restituire le prime dieci righe dalla vista.
SELECT TOP(10) * FROM sys.trigger_event_types;
Risultato:
+--------+-------------------+---------------+ | 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 | +--------+-------------------+---------------+
Se seleziono tutte le righe, ottengo 284 quando utilizzo SQL Server 2017 e 291 in SQL Server 2019.
Esempio 2 – Ottenere il genitore
Se guardi da vicino i risultati di sys.trigger_event_types
, vedrai che gli eventi di attivazione DDL sono gerarchici.
Ecco un esempio che mostra la gerarchia del CREATE_TABLE
evento di attivazione.
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;
Risultato:
+--------+---------------------------+---------------+ | 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 | +--------+---------------------------+---------------+
Possiamo vedere che DDL_EVENTS
è in cima alla gerarchia, seguito da DDL_DATABASE_LEVEL_EVENTS
, ecc, fino a raggiungere CREATE_TABLE
.
Un altro modo per visualizzarlo è questo:
DDL_EVENTS > DDL_DATABASE_LEVEL_EVENTS > DDL_TABLE_VIEW_EVENTS > DDL_TABLE_EVENTS > CREATE_TABLE
Puoi sostituire CREATE_TABLE
nella query con qualsiasi altro tipo di evento per vederne la gerarchia.
Vedere anche Query che restituisce un elenco gerarchico di tipi di eventi trigger in SQL Server per restituire un elenco gerarchico di tipi di eventi trigger.