跟踪更新后触发器中文本列的更新

时间:2013-02-27 11:27:57

标签: sql sql-server triggers

我有一个在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>)总是验证为true,我想这与软件有关被使用。

$ 64,000 *问题:

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

在您提出要求之前,我无法更改列类型。

* 不是真正的奖品

1 个答案:

答案 0 :(得分:1)

您可以将上一个NotesEditHistory.NotesAfterNote进行比较,如果它们不相等则插入