2009-08-07 14 views
4

Ich versuche, einen DDL-Trigger für eine bestimmte Tabelle zu erstellen und das ist das Beste, was ich tun konnte:Wie mache ich DDL-Trigger für eine bestimmte Tabelle?

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 

Ist das wirklich der einzige Weg, es zu tun? Ich habe überall gesucht, konnte aber keine Syntax finden, um den Trigger für eine bestimmte Tabelle zu erstellen. Ich denke, es ist wirklich albern, das XML EVENTDATA() verwenden zu müssen.

Antwort

2

Ja. Es ist der Weg, es zu tun. DDL-Trigger sind der Datenbank und nicht einzelnen Objekten zugeordnet. Daher können Sie DDL-Ereignisse, die nur für ein bestimmtes Objekt ausgeführt werden, nicht direkt abonnieren.

1

DDL-Trigger wie DDL_TABLE_EVENTS (oder ALTER_TABLE oder `DROP_TABLE) werden für Aktionen ausgelöst, die sich auf Objektkategorien und nicht auf bestimmte Instanzen eines Objekts beziehen.

Ref.-Nr. Designing DDL Triggers

Verwandte Themen