Как сделать DDL Trigger для конкретной таблицы? - PullRequest
4 голосов
/ 08 августа 2009

Я пытаюсь создать триггер 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 ]

2 голосов
/ 08 августа 2009

Да. Это способ сделать это. Триггеры DDL связаны с базой данных, а не с отдельными объектами. Как следствие, вы не можете напрямую подписаться на события DDL, происходящие только с конкретным объектом.

1 голос
/ 08 августа 2009
Триггеры

DDL, такие как DDL_TABLE_EVENTS (или, например, ALTER_TABLE или `DROP_TABLE), запускают действия, связанные с категориями объектов, а не с конкретными экземплярами объекта.

Ref. Проектирование триггеров DDL

...