DDL 触发器未监视 table 个触发器事件
DDL trigger not monitoring table trigger events
我有以下 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)来 enable/disable 一个 table 触发器时,一个事件被插入到 table.
但是,当我使用 T-SQL 时如下:
ENABLE trigger tr_mytable ON mytable
没有事件插入 table。
这是设计使然吗?
这是因为 GUI 使用导致 DDL 触发器触发的旧语法 ALTER TABLE DISABLE TRIGGER
,但新语法 'DISABLE TRIGGER' 不会。
它也没有被默认跟踪捕获,前段时间你可以在这里投票这个问题:Fire a DDL TRIGGER when the new syntax "DISABLE TRIGGER" is executed
现在我关闭了,因为不会修复
我有以下 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)来 enable/disable 一个 table 触发器时,一个事件被插入到 table.
但是,当我使用 T-SQL 时如下:
ENABLE trigger tr_mytable ON mytable
没有事件插入 table。
这是设计使然吗?
这是因为 GUI 使用导致 DDL 触发器触发的旧语法 ALTER TABLE DISABLE TRIGGER
,但新语法 'DISABLE TRIGGER' 不会。
它也没有被默认跟踪捕获,前段时间你可以在这里投票这个问题:Fire a DDL TRIGGER when the new syntax "DISABLE TRIGGER" is executed
现在我关闭了,因为不会修复