W SQL Server możesz użyć sys.trigger_event_types
aby zwrócić wszystkie zdarzenia lub grupy zdarzeń, na które może zadziałać wyzwalacz.
Przykład 1 – Mała próbka
Tutaj używam TOP()
klauzula zwracająca pierwsze dziesięć wierszy z widoku.
SELECT TOP(10) * FROM sys.trigger_event_types;
Wynik:
+--------+-------------------+---------------+ | 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 | +--------+-------------------+---------------+
Jeśli wybiorę wszystkie wiersze, otrzymam 284 podczas korzystania z SQL Server 2017 i 291 w SQL Server 2019.
Przykład 2 – Pozyskiwanie rodzica
Jeśli przyjrzysz się uważnie wynikom sys.trigger_event_types
, zobaczysz, że zdarzenia wyzwalające DDL są hierarchiczne.
Oto przykład, który pokazuje hierarchię CREATE_TABLE
zdarzenie wyzwalające.
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;
Wynik:
+--------+---------------------------+---------------+ | 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 | +--------+---------------------------+---------------+
Widzimy, że DDL_EVENTS
znajduje się na szczycie hierarchii, po którym następuje DDL_DATABASE_LEVEL_EVENTS
itd., aż dojdziemy do CREATE_TABLE
.
Inny sposób na wizualizację tego jest taki:
DDL_EVENTS > DDL_DATABASE_LEVEL_EVENTS > DDL_TABLE_VIEW_EVENTS > DDL_TABLE_EVENTS > CREATE_TABLE
Możesz zastąpić CREATE_TABLE
w zapytaniu z dowolnym innym typem zdarzenia, aby zobaczyć jego hierarchię.
Zobacz także Zapytanie, które zwraca hierarchiczną listę typów zdarzeń wyzwalających w SQL Server, aby zwrócić hierarchiczną listę typów zdarzeń wyzwalających.