0

SQL SERVER 2005 でトリガーを使用すると、eventdata() は常に空の値を返します。

Audit テーブルに挿入された日付のみ、その他のフィールドは NULL 値

助けてください

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
4

1 に答える 1

1

MSDN状態のEVENTDATA

EVENTDATA は、DDL またはログオン トリガー内で直接参照された場合にのみデータを返します。EVENTDATA は、他のルーチンによって呼び出された場合、それらのルーチンが DDL またはログオン トリガーによって呼び出された場合でも、null を返します。

上記のトリガーは DML AFTER トリガーです。

あなたが必要

CREATE TRIGGER TRG_CreateTable
ON DATABASE 
FOR CREATE_TABLE 
...
于 2013-06-25T09:19:58.143 に答える