在Sql Server

时间:2017-11-29 13:21:35

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

我正在更新表格

  

表:用户(id,name,Dob,createdDate,lastUpdatedDate)

我希望在Name列中有更改时更新lastUpdatedDate。

首先我使用了更新触发器,但是在更新记录后执行

一些帮助链接建议我使用而不是更新触发器,但如果我使用它,它将不会在触发后更新我的记录。

任何解决方案?

1 个答案:

答案 0 :(得分:0)

我找到了适合这个问题的解决方案

在更新后触发器中有两个表集,一个是已插入,另一个是已删除。 所以通过从两个表集中获取名称,我们可以将值存储在那里。如果值相同,我们将不会更新lastUpdatedDate,如果值有任何差异,那么我们将更新lastUdpatedDate

Create TRIGGER [dbo].[User__Update]
       ON [dbo].[User]
AFTER Update
AS
BEGIN
       SET NOCOUNT ON;


        declare @AttributeValue varchar(max)

       declare @OldAttributeValue varchar(max)

       SELECT @AttributeValue = INSERTED.Name
       FROM INSERTED

       select @OldAttributeValue=Deleted.Name
        FROM Deleted

        if(@OldAttributeValue<>@AttributeValue)
        BEGIN
                 IF UPDATE(Name)  
                 BEGIN
                        update [User] set LastUpdatedDate=GetDate() where name =@AttributeValue
                 END
        END
END