Sql server TSQL从表更新或插入到表中

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

我目前正在SQL Server 2012上开发T-SQL中的存储过程。我正在尝试更新或插入另一个表中的条目

例如,当前,如果原始表有一个条目,我只能更新一条记录。如果我从导入表中获得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     
不知怎的,这个查询不能正常工作,它只更新一个条目,如果有一个现有的,例如

你知道如何解决这个问题吗


多谢各位

忘掉行数吧。更改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语句呢?