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.