【问题标题】:TSQL UPDATE or INSERT INTO Table from TableTSQL UPDATE 或 INSERT INTO Table from Table
【发布时间】:2017-05-18 08:04:45
【问题描述】:

我目前正在 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 个条目,例如...

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

非常感谢!

【问题讨论】:

  • 在这种情况下为什么不使用MERGE 语句?

标签: sql-server tsql


【解决方案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

【讨论】:

    猜你喜欢
    • 2015-04-12
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 2023-02-09
    • 2016-01-11
    • 1970-01-01
    • 2014-05-12
    相关资源
    最近更新 更多