在SQL SERVER 2005中使用触发器时,eventdata()始终返回空值。
只在Audit表中插入日期,其他字段为NULL valus
请帮帮我
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[TrigDip]
ON [dbo].[Dip]
AFTER INSERT,DELETE,UPDATE
AS
BEGIN
DECLARE @ed XML
SET @ed = EVENTDATA()
DECLARE @db varchar(1000)
set @db =EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(256)')
PRINT 'CREATE TABLE Issued.'
INSERT INTO Audit (PostTime, DatabaseName, Event, ObjectName, TSQL, Login)
VALUES
(
GetDate(),
@db,
EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),
EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)'),
EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)'),
CONVERT(nvarchar(100), CURRENT_USER)
)
END
答案 0 :(得分:1)
EVENTDATA仅在直接在DDL或登录触发器内引用时返回数据。如果EVENTDATA被其他例程调用,则返回null,即使这些例程是由DDL或登录触发器调用的。
上面的触发器是DML AFTER触发器。
你需要
CREATE TRIGGER TRG_CreateTable
ON DATABASE
FOR CREATE_TABLE
...