2009-08-07 77 views
4

我试图创建一个特定的表DDL触发器,这是我能想出的最好:如何为特定表制作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

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

1

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

Ref。 Designing DDL Triggers

相关问题