Sql server SQL Server DML触发器
我想尝试监视我的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,
----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_日志表时,才会触发触发器,并且只会插入额外的行。