2013-12-03 22 views
2

我有一個記錄DDL更改的數據庫觸發器。它有以下格式:如何確定什麼操作觸發了處理多個事件的觸發器

CREATE TRIGGER [Log_DDL_Changes] 

ON DATABASE 
FOR 
CREATE_TABLE, ALTER_TABLE, DROP_TABLE, 
CREATE_INDEX, ALTER_INDEX, DROP_INDEX, 
CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE, 
CREATE_VIEW, ALTER_VIEW, DROP_VIEW, 
CREATE_FUNCTION, ALTER_FUNCTION, DROP_FUNCTION, RENAME 

--Fires only for CREATE/ALTER/DROP Table and PROCs 
AS 

BEGIN 
. 
. 
. 
END 

我希望在創建或更改表,視圖或索引時添加特殊處理。

如何確定哪個事件觸發了處理多個事件的觸發器?

回答

1

您可以使用這樣的事情在你的觸發器:

SELECT EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(max)') 
+0

感謝您的答覆。雖然這可能會奏效,但我認爲這比解析SQL命令更好。我覺得我應該能夠鍵入出現在FOR CLAUSE中的EVENT名稱。如果必須的話,我會盡快把我的觸發器分解成單獨的觸發器,這樣我就可以知道什麼事件讓我執行 – ChadD

+0

@ChadD這就是爲什麼我說「*類似這樣的*」。有很多選擇,但是我已經改變它來更密切地反映您評論的偏好。 – RBarryYoung

+0

啊,我現在看到你的編輯。這正是我所期待的。 TY! – ChadD