我在 SQL Server 2012 中有一个 DDL 触发器:
CREATE TRIGGER [AuditProcChanges]
ON DATABASE FOR
CREATE_TABLE,ALTER_TABLE,DROP_TABLE
AS
DECLARE @message_body XML
SET @message_body = EVENTDATA()
BEGIN
BEGIN TRANSACTION
INSERT INTO MyChangeLog(vcEventType, dtEventTime, vcServerName, vcLoginName
, vcUserName, vcObjectName, vcObjectType, vcSQL)
SELECT @message_body.value('(/EVENT_INSTANCE/EventType)[1]',
'varchar(128)') AS EventType,
GETUTCDATE() AS PostTime,
@message_body.value('(/EVENT_INSTANCE/ServerName)[1]',
'varchar(128)') AS ServerName,
@message_body.value('(/EVENT_INSTANCE/LoginName)[1]',
'varchar(128)') AS LoginName,
@message_body.value('(/EVENT_INSTANCE/UserName)[1]',
'varchar(128)') AS UserName,
@message_body.value('(/EVENT_INSTANCE/ObjectName)[1]',
'varchar(128)') AS ObjectName,
@message_body.value('(/EVENT_INSTANCE/ObjectType)[1]',
'varchar(128)') AS ObjectType,
@message_body.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]',
'nvarchar(max)') AS TSQLCommand
COMMIT TRANSACTION
END
Run Code Online (Sandbox Code Playgroud)
但是当我从设计视图(右键单击和设计)更改表时,记录的事件只是临时表的创建和主表的删除。Create_Table 事件没有被捕获。
当我们从设计视图更改表时,我们不能捕获日志事件。请帮忙。