0

我有一个在 SQL-Server 2000 中设计但在 SQL-Server 2008 中运行的数据库。其中一个表有一个TEXT带有注释的列,我需要跟踪对此列所做的更改数量。

目前有一个触发器从插入的值插入:

ALTER TRIGGER [dbo].[NotesEdited] 
   ON  [dbo].[NOTESTABLE] 
   AFTER UPDATE
AS 
BEGIN

SET NOCOUNT ON;

DECLARE @UserID VarChar(4);
DECLARE @DateEdited datetime;
DECLARE @NotesAfter varchar(max);
DECLARE @PRIMARY float;

SELECT @UserID = user_edited FROM inserted;
SELECT @PRIMARY = note_primary FROM inserted;
SELECT @DateEdited = GetDate();
SELECT @NotesAfter = (select note from NOTESTABLE where note_primary = @PRIMARY)

IF UPDATE(note)

    BEGIN

        insert into NotesEditHistory (DateEdited,NotesAfter,UserID) values(@DateEdited,@NotesAfter,@UserID)


    END 


END

最大的问题是软件对表执行了 2 到 10 次更新,其中只有一次对note字段进行了更改,但会导致 2-10 次插入到表中。

我认为这可以使用该行解决,IF UPDATE(note)但似乎每次更新都在运行,IF UPDATE(<FIELD>)总是验证为真,我想这与正在使用的软件有关。

64,000 美元* 问题:

text如果我无法访问列的deletedorinserted值,如何在更新后触发器中测试列的更新?

在您问之前,我无法更改列类型。

*不是真正的奖品

4

1 回答 1

1

如果它们不相等,NotesEditHistory.NotesAfter您可以比较最后一个并插入Note

于 2013-02-27T11:46:20.677 回答