2009-08-07 16 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

相關問題