我目前正在使用SQL Server 2012上的T-SQL中的存储过程。我试图更新或插入另一个表中的表条目。
目前,如果原始表有1个条目,我只能更新1条记录。如果我从导入表中获得10个条目,我想更新1个条目并将剩余的9个记录添加到我的表中。
临时表(新值)
#tmpDelivery (VersionId INT, DeliveryModelId INT)
交货表(原件,待更新)
[MySchema].[Delivery] (DeliveryId INT, DeliveryModelId INT, VersionId INT)
我当前的脚本如下所示:
UPDATE [MySchema].[Delivery]
SET DeliveryModelId = [D].DeliveryModelId
FROM #tmpDelivery [D]
WHERE [MySchema].[Delivery].VersionId = 1
AND [D].VersionId = [MySchema].[Delivery].VersionId
IF @@ROWCOUNT = 0
INSERT INTO [MySchema].[Delivery] ([DeliveryModelId], [VersionId])
SELECT DeliveryModelId, VersionId
FROM #tmpDelivery
不知怎的,这个查询没有正常工作,如果例如存在1个,它只会更新1个条目...
你知道如何解决这个问题吗?
非常感谢!
答案 0 :(得分:1)
忘掉行数。更改插入语句,以便它只插入不存在的记录。您可以使用外部联接。
UPDATE [MySchema].[Delivery]
SET DeliveryModelId = [D].DeliveryModelId
FROM #tmpDelivery [D]
WHERE [MySchema].[Delivery].VersionId = 1
AND [D].VersionId = [MySchema].[Delivery].VersionId
INSERT INTO [MySchema].[Delivery] ([DeliveryModelId], [VersionId])
SELECT t.DeliveryModelId, t.VersionId
FROM #tmpDelivery t
left join [MySchema].[Delivery] d on t.DeliveryModelId = d.DeliveryModelId
and t.VersionId = d.VersionId
where d.DeliveryModelId is null