这就是我想要完成的:我需要更新一条记录(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
答案 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
虽然有点危险,但永久解决方案。