【问题标题】:Should I do merge here?我应该在这里合并吗?
【发布时间】:2015-05-19 14:59:05
【问题描述】:

我有一些不同的项目应该复制到不同的组织。我已经用合并语句做到了这一点。当项目不存在时,我工作得很好,但下次它应该更新时,它会在每个组织中创建新项目。

merge items as target
using
   (
   select items.name, items.value, items.org
   from Items
   ) as source
on (target.items.name = source.items.name and 
    target.items.value = '50')
when matched then
   update set target.items.name = source.items.name
when not matched by target then
Insert(...)
Values(...);

我想这与下次条件不符合条件并且新项目创建但我不明白为什么..

也许只做简单的插入会更好?

【问题讨论】:

  • 如果您的条件包含target.items.name = source.items.name,则在匹配时更新目标名称没有任何意义。
  • 表中有不同的行需要用其他行更新。一个组织的项目应该更新另一个组织的项目。
  • 从您的描述或您的非工作代码中我​​不清楚您希望完成什么。如果您有一个实际有效的简单插入,也许您可​​以在您的问题中使用包含它?

标签: sql merge sql-server-2012 bulkinsert bulk


【解决方案1】:

一个组织的项目应该更新另一个组织的项目。

合并语句不支持更新“其他行”。从概念上讲,它是逐行操作的。源和目标是连接的(完全外连接),对于每个连接结果,您可以决定发生的一个操作。对于更新和删除,该操作发生在连接的目标表行上。

你需要使用多个语句。

【讨论】:

    猜你喜欢
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多