DDL触发器不监视表触发事件

时间:2017-08-22 06:33:42

标签: sql sql-server sql-server-2016

我有以下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

表中没有插入任何事件。

这是设计吗?

1 个答案:

答案 0 :(得分:2)

这是因为GUI使用导致DDL触发器触发的遗留语法ALTER TABLE DISABLE TRIGGER,但新语法“禁用触发器”#39;才不是。

默认情况下也没有跟踪,前一段时间你可以在这里投票:Fire a DDL TRIGGER when the new syntax "DISABLE TRIGGER" is executed

现在我已经关闭,因为没有解决