我有一个在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 *问题:
如果我无法访问列的text
或deleted
值,如何在更新后触发器中测试inserted
列的更新?
在您提出要求之前,我无法更改列类型。
* 不是真正的奖品
答案 0 :(得分:1)
您可以将上一个NotesEditHistory.NotesAfter
与Note
进行比较,如果它们不相等则插入