Краткий ответ - да.События триггера DDL являются иерархическими.Вы можете увидеть отношения в sys.trigger_event_types
.Например, давайте посмотрим на иерархию, в которой существует DROP_PROCEDURE
, мы можем использовать этот запрос:
WITH e AS (
SELECT tet.type ,
tet.type_name ,
tet.parent_type, 1 AS level
FROM sys.trigger_event_types AS tet
WHERE tet.type_name = 'DROP_PROCEDURE'
UNION ALL
SELECT parent.type ,
parent.type_name ,
parent.parent_type, child.level + 1 AS level
FROM e AS child
JOIN sys.trigger_event_types AS parent
ON child.parent_type = parent.type
)
SELECT *
FROM e
ORDER BY level DESC;
Исходя из этого, я вижу (на моем сервере), что DROP_PROCEDURE
принадлежит DDL_PROCEDURE_EVENTS
, DDL_DATABASE_LEVEL_EVENTS
и DDL_EVENTS
(в порядке уменьшения степени детализации).Допустим, вы выбрали DDL_DATABASE_LEVEL_EVENTS
, вы могли бы выяснить все, что будет описано ниже.
WITH e AS (
SELECT tet.type ,
tet.type_name ,
tet.parent_type, 1 AS level
FROM sys.trigger_event_types AS tet
WHERE tet.type_name = 'DDL_DATABASE_LEVEL_EVENTS'
UNION ALL
SELECT child.type ,
child.type_name ,
child.parent_type ,
parent.level + 1 AS level
FROM e AS parent
JOIN sys.trigger_event_types AS child
ON child.parent_type = parent.type
)
SELECT *
FROM e
ORDER BY level