Sql server TSQL从表更新或插入到表中
我目前正在SQL Server 2012上开发T-SQL中的存储过程。我正在尝试更新或插入另一个表中的条目 例如,当前,如果原始表有一个条目,我只能更新一条记录。如果我从导入表中获得10个条目,我想更新1个条目,并将其余9条记录添加到我的表中 临时表新值Sql server TSQL从表更新或插入到表中,sql-server,tsql,Sql Server,Tsql,我目前正在SQL Server 2012上开发T-SQL中的存储过程。我正在尝试更新或插入另一个表中的条目 例如,当前,如果原始表有一个条目,我只能更新一条记录。如果我从导入表中获得10个条目,我想更新1个条目,并将其余9条记录添加到我的表中 临时表新值 #tmpDelivery (VersionId INT, DeliveryModelId INT) 交货表原件,待更新 [MySchema].[Delivery] (DeliveryId INT, DeliveryModelId INT, V
#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
不知怎的,这个查询不能正常工作,它只更新一个条目,如果有一个现有的,例如
你知道如何解决这个问题吗
多谢各位 忘掉行数吧。更改insert语句,使其仅插入不存在的记录。您可以为此使用外部联接
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
在这种情况下,为什么不使用MERGE语句呢?