列的旧值未反映在触发器中

时间:2012-01-20 07:20:59

标签: sql sql-server sql-server-2008

我的更新触发器如下。

CREATE TRIGGER [dbo].[tb_sample_UpdationTrigger] on [dbo].[tb_sample]  for UPDATE
as
 if UPDATE(R_Id) 
 insert into dbo.test_log(Attribute,Action,OldValue,NEwValue,UserId,ModifiedDate)   

(SELECT 'R_Id','update',tb_sample.R_Id,inserted.R_Id ,1,GETDATE()
 from inserted 
 inner join tb_sample on inserted.id =tb_sample.id)

。我将R_Id从100000更新为200000。但是插入日志表的记录是

   R_Id update  200000      200000      1   2012-01-20 12:38:16.730 

如果我们看到旧值和新值都是200000。 Wats在这里错了吗?

1 个答案:

答案 0 :(得分:2)

如果要获取旧值,则必须使用deleted特殊表,因为更新可以被视为删除和插入操作。见:Using the inserted and deleted Tables。所以你的选择应该看起来像(未经测试):

SELECT 'R_Id','update', d.R_Id, i.R_Id ,1,GETDATE()
FROM inserted i
INNER JOIN deleted d ON d.id=i.id
INNER JOIN tb_sample ON tb_sample.id=i.id