【问题标题】:Merging two child tables from two different databases合并来自两个不同数据库的两个子表
【发布时间】:2013-07-30 20:33:35
【问题描述】:

我是 SQL SERVER 2012 MERGE 语句的新手。我需要将来自不同数据库的两个子表合并到一个表中。

数据库A:

  1. 父发票表 -InvNo int -InvDate 日期时间 -客户名称 varchar(50) -InvVal 双倍

  2. 子 InvoiceDet 表 -InvNo int -InvDate 日期时间 -ItemName varchar(50) -数量 int - 加倍费率

DataBaseB:包含与上述相同的结构。

  1. 现在我想在不丢失数据的情况下将两个子表合并为一个子表。一张发票可能包含不同/相等数量的相同项目。如何合并这些子表。

提前致谢, 森提尔

【问题讨论】:

    标签: sql-server-2012


    【解决方案1】:

    首先,您需要能够同时查询两个表。您可能需要链接服务器或 openrowset(或朋友)。

    看你只是想如何合并子表,父表是无关紧要的。

    然后你需要弄清楚合并的逻辑。假设您要将 A 合并到 B 中。有三种情况:

    • 匹配
    • 不匹配 [按目标]
    • 来源不匹配

    你想在每种情况下做什么?

    设计完成后,文档 (http://technet.microsoft.com/en-us/library/bb510625.aspx) 有很好的示例。

    基本上你想要的:

    MERGE child as target
    USING (select ... from databaseA.dbo.child) as source (...)
    ON (conditions)
    WHEN MATCHED THEN
        UPDATE SET target.v = source.v
    WHEN NOT MATCHED BY TARGET THEN
        INSERT (v) VALUES (source.v)
    -- WHEN NOT MATCHED BY SOURCE THEN
      -- Don't delete anything
    ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 2012-02-18
      相关资源
      最近更新 更多