0

我们公司曾经拥有本地和云 ERP 系统,他们最终希望将每个 ERP 系统中的数据提取到我们数据仓库中的暂存数据库中。这两个系统在表结构和模式方面是相同的,但是,我们需要合并几个表来创建一个唯一的表。例如,来自 ERP1 的 dbo.Product 和来自 ERP2 系统的 dbp.Product 具有重叠的 productId(s),在不破坏数据完整性的情况下合并这两个表是理想的情况

示例:ERP1.Product( ProductId int , ProductName varchar(90), Product varchar(MAX) )

ERP2.Product( ProductId int , ProductName varchar(90), Product varchar(MAX) )

在此处输入图像描述

4

2 回答 2

0

这里最大的问题是,当产品 ID 重叠时,是否需要在合并时尊重这一事实?即它们是否真的是同一种产品,或者重叠是偶然的?

如果需要尊重重叠/does/,那么我建议您需要在产品名称/描述不同的情况下确定哪个是主要来源,然后以忽略重复出现的方式加载数据仓库表来自次要来源,例如:

... where erp2product.productid not in (select erp1product.productid from erp1product) 

如果没有“真正的”重叠,那么我倾向于在产品 ID 的前面加上一个前缀(或添加一个“源”列)以在数据仓库中区分它们,尽管显然数据中的任何其他表包含产品 ID 的仓库必须遵循相同的规则。

于 2018-04-17T20:54:19.443 回答
0

UNION会工作

select * from ERP1 
union 
select * from ERP2

UNION返回不同的值,其中UNION ALL返回所有可能重复的值。自然,每条语句必须返回相同数量的列,并且具有匹配的数据类型。

如果要动态创建表,可以INTO在第一条语句中使用子句

select * from Server1.dbo.ERP1
into thisServer.dbo.StagingTable
union 
select * from Server2.dbo.ERP2
于 2018-04-17T20:50:23.037 回答