TSQL UPDATE或INSERT INTO Table from Table

时间:2017-05-18 08:04:46

标签: sql-server tsql

我目前正在使用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个条目...

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

非常感谢!

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