DDL триггер для всего - PullRequest
0 голосов
/ 23 мая 2018

У меня есть знаменитый триггер DDL, который запускает все, что происходит в БД

https://www.mssqltips.com/sqlservertip/2085/sql-server-ddl-triggers-to-track-all-database-changes/

в примере, он установлен

FOR CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE

, но я притворяюсьрасширять для каждого изменения DDL, поэтому я ищу: https://docs.microsoft.com/en-us/sql/relational-databases/triggers/ddl-events

более 200 событий !!

мы можем использовать что-то вроде?

CREATE TRIGGER DDLTrigger_Sample
    ON DATABASE
    FOR ABSOLUTELY_EVERYTHING
AS
BEGIN

1 Ответ

0 голосов
/ 23 мая 2018

Краткий ответ - да.События триггера 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...