【发布时间】:2013-09-15 14:11:44
【问题描述】:
我正在使用 SSIS 来合并连接 sql server 数据(左)和 oracle 数据(右)。两个数据集都在合并连接之前在源处排序。当 oracle 源仅返回一行时它工作正常,但当它返回多行时则不行。即使有几行具有匹配的数据,它也不会在 Merge Join 之后返回数据。这是我的流程:
更多信息:
两者都是预先排序的(在源查询中排序)。 oracle 源列 EXTERNLAL_ID 在查询中被强制转换为整数,即 CAST(EXTERNAL_ID AS INTEGER),因此在 Merge Join 之前,两个连接键都以 DT_I4 结束。
示例:SQL Server 源代码有三行 UNIQUEID:1,2,3,Oracle 源代码有一行 EXTERNAL_ID:1,Oracle_UNIQUE_ID:999; Merge Join 使用 SQL Server UNIQUEID:1、EXTERNAL_ID:1 和 ORACLE_UNIQUE_ID:999 按预期返回一行。如果 SQL Server 源有三行 UNIQUEID: 1,2,3 而 Oracle 源有两行 EXTERNAL_ID:1,2 和 ORACLE_UNIQUE_ID:999,998;合并连接不返回任何数据。
【问题讨论】:
-
您的 oracle 数据库的 加入密钥 不是
ORACLE_UNIQUE_ID -
是的,不是。 Oracle 的连接键是 external_id(排序顺序 1)。
-
数据是否已预先排序?即在两个查询中都以 ORDER BY 形式排序? SSIS 数据类型是否匹配?
-
两者都是预先排序的(在源查询中排序)。 oracle 源列 EXTERNLAL_ID 在查询中被强制转换为整数,即 CAST(EXTERNAL_ID AS INTEGER),因此在 Merge Join 之前,两个连接键都以 DT_I4 结束。
-
两个问题:什么是数据转换变换,具体来说:对key列有影响吗?另外:围绕Oracle数据源和合并连接的容器是什么?
标签: sql-server ssis inner-join