我有以下DDL触发器:
CREATE TABLE ddl_log (PostTime datetime, DB_User nvarchar(100), Event nvarchar(100), TSQL nvarchar(2000));
GO
CREATE TRIGGER log
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
DECLARE @data XML;
SET @data = EVENTDATA();
INSERT ddl_log
(PostTime, DB_User, Event, TSQL)
VALUES
(GETDATE(),
CONVERT(nvarchar(100), CURRENT_USER),
@data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),
@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ;
GO
当我使用SSMS(即UI)启用/禁用表触发器时,会在表中插入一个事件。
但是,当我按如下方式使用T-SQL时:
ENABLE trigger tr_mytable ON mytable
表中没有插入任何事件。
这是设计吗?
答案 0 :(得分:2)
这是因为GUI使用导致DDL触发器触发的遗留语法ALTER TABLE DISABLE TRIGGER
,但新语法“禁用触发器”#39;才不是。
默认情况下也没有跟踪,前一段时间你可以在这里投票:Fire a DDL TRIGGER when the new syntax "DISABLE TRIGGER" is executed
现在我已经关闭,因为没有解决