【问题标题】:How to make DDL Trigger for a specific table?如何为特定表制作 DDL 触发器?
【发布时间】:2010-11-17 20:14:18
【问题描述】:

我正在尝试为特定表创建 DDL 触发器,这是我能想到的最好的方法:

CREATE TRIGGER MyTrigger
ON DATABASE
FOR DDL_TABLE_EVENTS
AS
DECLARE @EventData      xml
SET @EventData=EVENTDATA()

IF @EventData.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(50)')='TABLE'
    AND @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(50)') ='MyTable'
BEGIN
    --do something special here!!
END
GO

这真的是唯一的方法吗?我到处寻找,但找不到在特定表上创建触发器的语法。我认为需要使用 xml EVENTDATA() 真的很愚蠢。

【问题讨论】:

    标签: sql-server sql-server-2005 tsql triggers


    【解决方案1】:

    是的。这是做到这一点的方法。 DDL 触发器与数据库相关联,而不是与单个对象相关联。因此,您不能直接订阅仅在特定对象上发生的 DDL 事件。

    【讨论】:

      【解决方案2】:

      DDL 触发器,例如 DDL_TABLE_EVENTS(或 ALTER_TABLE 或 `DROP_TABLE)触发与对象类别相关的操作,而不是对象的特定实例。

      参考。 Designing DDL Triggers

      【讨论】:

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