【问题标题】:How do I determine what Action triggered a trigger that handles multiple events如何确定哪个 Action 触发了处理多个事件的触发器
【发布时间】:2013-12-03 18:40:51
【问题描述】:

我有一个记录 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

我想在创建或更改表、视图或索引时添加特殊处理。

如何确定哪个事件触发了处理多个事件的触发器?

【问题讨论】:

    标签: sql-server sql-server-2008 tsql ddl-trigger


    【解决方案1】:

    你在触发器中使用了这样的东西:

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

    【讨论】:

    • 感谢您的回复。虽然这可能有效,但我认为有比解析 SQL 命令更好的方法。我觉得我应该能够关闭出现在 FOR CLAUSE 中的 EVENT 名称。如果必须,我会尽快将触发器分解为单独的触发器,这样我就可以知道是什么事件让我执行了
    • @ChadD 这就是我说“类似这样的事情”的原因。有很多选项,但我已将其更改为更准确地反映您的评论偏好。
    • 啊,我现在看到你的编辑了。这正是我一直在寻找的。泰!
    猜你喜欢
    • 2021-07-14
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2017-10-11
    • 1970-01-01
    相关资源
    最近更新 更多