Sql server SQL Server DML触发器

Sql server SQL Server DML触发器,sql-server,Sql Server,我想尝试监视我的SQL Server状态,如果发生任何DML操作,触发器应该记录日志 ----create table----- USE [master] GO CREATE TABLE [dbo].[ChangeLogin_Log] ( [ActionTime] [DATETIME] NULL DEFAULT (getdate()), [Username] [NVARCHAR](100) NULL, [EventType] [NVARCHAR](100) NULL,

我想尝试监视我的SQL Server状态,如果发生任何DML操作,触发器应该记录日志

----create table-----
USE [master]
GO

CREATE TABLE [dbo].[ChangeLogin_Log]
(
    [ActionTime] [DATETIME] NULL DEFAULT (getdate()),
    [Username] [NVARCHAR](100) NULL,
    [EventType] [NVARCHAR](100) NULL,
    [Data] [XML] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

----------------------TRIGGER ---------------------
CREATE TRIGGER [test] ON dbo.ChangeLogin_Log
FOR INSERT
AS
    DECLARE @data XML = eventdata();
BEGIN 
    INSERT INTO ChangeLogin_Log(Username, EventType, Data)
    VALUES (CURRENT_USER,
            @data.value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(100)'),
            @data)
END
GO
当我插入一条记录时,
ChangeLogin\u Log
将不会显示事件类型、数据值-我的错误在哪里


谢谢

事件数据适用于DDL触发器,而不是DML触发器。你真的想把所有的DML更改存储在一个表中吗?这基本上是在复制日志功能,这是一个坏主意。只有在将数据插入ChangeLogin_日志表时,才会触发触发器,并且只会插入额外的行。