如何为特定表格制作DDL触发器?

时间:2009-08-07 21:42:42

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

我正在尝试为特定的表创建一个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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

参考。 Designing DDL Triggers