В SQL Server можете да използвате sys.trigger_event_types
за да върне всички събития или групи събития, за които може да се задейства тригер.
Пример 1 – Малка извадка
Тук използвам TOP()
клауза за връщане на първите десет реда от изгледа.
SELECT TOP(10) * FROM sys.trigger_event_types;
Резултат:
+--------+-------------------+--------------+| тип | тип_име | тип_родител ||--------+------------------+--------------|| 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 | АКТУАЛИЗИРАНИ_СТАТИСТИКИ | 10021 || 29 | DROP_STATISTICS | 10021 || 34 | CREATE_SYNONYM | 10022 |+--------+------------------+--------------+предварително>Ако избера всички редове, получавам 284, когато използвам SQL Server 2017 и 291 в SQL Server 2019.
Пример 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 ниво FROM sys.trigger_event_types WHERE type_name ='CREATE_TABLE' UNION ALL SELECT tet.type, tet.type_rent_name, , et.level + 1 AS ниво FROM event_types AS et JOIN sys.trigger_event_types AS tet ON et.parent_type =tet.type)SELECT Type, Type_name, Parent_TypeFROM event_typesORDER BY level DESC;Резултат:
+--------+--------------------------+-------- ------+| Тип | Тип_име | Тип_родител ||-------+------------------------------+---------- -----|| 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
в заявката с всеки друг тип събитие, за да видите йерархията му.Вижте също Заявка, която връща йерархичен списък с типове задействащи събития в SQL Server, за да върнете йерархичен списък с типове задействащи събития.