SQL eventdata()

时间:2013-06-25 09:05:39

标签: sql sql-server sql-server-2005

在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

1 个答案:

答案 0 :(得分:1)

EVENTDATA on MSDN

  

EVENTDATA仅在直接在DDL或登录触发器内引用时返回数据。如果EVENTDATA被其他例程调用,则返回null,即使这些例程是由DDL或登录触发器调用的。

上面的触发器是DML AFTER触发器。

你需要

CREATE TRIGGER TRG_CreateTable
ON DATABASE 
FOR CREATE_TABLE 
...