【问题标题】:DDL trigger for everything一切的 DDL 触发器
【发布时间】:2018-05-23 15:45:14
【问题描述】:

我得到了著名的 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

【问题讨论】:

    标签: sql sql-server azure triggers azure-sql-database


    【解决方案1】:

    简短的回答 - 是的。 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-12
      • 2015-01-10
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多