SQL Server:更新记录,然后插入具有更新信息的相同记录

时间:2018-03-20 17:03:21

标签: sql sql-server-2012

这就是我想要完成的:我需要更新一条记录(w EndDate),然后插入带有更新信息的相同记录(w new Revision,StartDate和Blank EndDate)。我坚持如何实现这一目标。

我有一个SQL语句,我必须收集需要更新的某些记录。

示例记录..大约有4500条记录需要更新:

 PartID   Revision  StartDate    EndDate
 ----------------------------------------
 S2334D      1      08/20/2017
 Y423DS      A      08/18/2017
 KL432W      01     08/18/2017

对此:

 PartID   Revision  StartDate    EndDate
 -------------------------------------------
 S2334D      1      08/20/2017   03/20/2018
 S2334D      2      03/20/2018   
 Y423DS      A      08/18/2017   03/20/2018
 Y423DS      1      03/20/2018   
 KL432W      01     08/18/2017   03/20/2018
 KL432W      02     08/18/2017

1 个答案:

答案 0 :(得分:1)

我建议使用显式获取更新参数的SP,然后使用更新的记录执行插入或更新触发器。

    create proc p_revise(@partID, @rev, @otherfields)
    as
    update Part set EndDate = getutcdate() 
          where PartID = @partID AND Revision = @rev
    insert into Part (PartID, Revision, StartDate)
         select @partID, @rev + 1, EndDate from Part
         where PartID = @partID AND Revision = @rev

这样的事情。 如果您的修订不仅仅是数字,那么您将需要比rev + 1更聪明的东西,如您的示例所示。

或者,如果这是一次性的事情,您可以创建一个更新触发器,根据“inserted”表在同一个表中执行插入。

create trigger Part_update on Part for update as
    insert into Part (PartID, Revision, StartDate)
             select PartID, Revision + 1, EndDate from inserted

虽然有点危险,但永久解决方案。