我正在尝试为特定的表创建一个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()非常愚蠢。
答案 0 :(得分:2)
是。这是做到这一点的方式。 DDL触发器与数据库而不是单个对象相关联。因此,您无法直接订阅仅在特定对象上发生的DDL事件。
答案 1 :(得分:1)
DDL触发器,例如DDL_TABLE_EVENTS
(或诸如ALTER_TABLE
或“DROP_TABLE”)触发与对象类别相关的操作,而不是对象的特定实例。