Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server集成服务合并联接不适用于多行_Sql Server_Ssis_Inner Join - Fatal编程技术网

Sql server SQL Server集成服务合并联接不适用于多行

Sql server SQL Server集成服务合并联接不适用于多行,sql-server,ssis,inner-join,Sql Server,Ssis,Inner Join,我正在使用SSI合并联接sql server数据(左)和oracle数据(右)。这两个数据集在合并联接之前在源位置进行排序。当oracle源仅返回一行时,它可以正常工作,但当它返回多行时,它就不能正常工作。即使有多行具有匹配的数据,它也不会在合并联接后返回数据。以下是我的流程: 更多信息: 两者都是预先排序的(按源查询中的顺序)。oracle源列EXTERNAL\u ID在查询中被转换为整数,即cast(EXTERNAL\u ID为整数),因此在合并联接之前,两个联接键都被转换为DT\u I

我正在使用SSI合并联接sql server数据(左)和oracle数据(右)。这两个数据集在合并联接之前在源位置进行排序。当oracle源仅返回一行时,它可以正常工作,但当它返回多行时,它就不能正常工作。即使有多行具有匹配的数据,它也不会在合并联接后返回数据。以下是我的流程:

更多信息:

两者都是预先排序的(按源查询中的顺序)。oracle源列
EXTERNAL\u ID
在查询中被转换为整数,即
cast(EXTERNAL\u ID为整数)
,因此在合并联接之前,两个联接键都被转换为DT\u I4


示例:SQL Server源代码有三行
UNIQUEID
:1,2,3,Oracle源代码有一行
EXTERNAL\u ID
:1,
Oracle\u UNIQUE\u ID
:999;合并联接使用SQL Server
UNIQUEID
:1、
EXTERNAL\u ID
:1和
ORACLE\u UNIQUE\u ID
:999按预期返回一行。如果SQL Server源代码有三行
UNIQUEID
:1,2,3,Oracle源代码有两行
EXTERNAL\u ID
:1,2和
Oracle\u UNIQUE\u ID
:99999 8;合并联接未返回任何数据。

如果任一源的数据类型为VARCHAR()而不是INT,则排序可能无法按预期进行。考虑以下事项:

DECLARE @SampleTable TABLE (IntegerID INT, CharacterID VARCHAR(3))

INSERT INTO @SampleTable (IntegerID, CharacterID)

SELECT 1,1 UNION 
SELECT 2,2 UNION 
SELECT 12,12 UNION 
SELECT 122,122 UNION 
SELECT 3,3 UNION 
SELECT 133,133 UNION 
SELECT 31,31 UNION 
SELECT 321,321 


SELECT * FROM @SampleTable ORDER BY IntegerID

SELECT * FROM @SampleTable ORDER BY CharacterID
第一个SELECT按已知整数排序,按以下顺序返回数据:

1
2
3
12
31
...
1
12
122
133
2
3
...
第二个选择按字符字段(恰好包含数字)排序,按以下顺序返回数据:

1
2
3
12
31
...
1
12
122
133
2
3
...
SSIS任务只在SELECT中看到CAST()语句,它假定在对数据排序时,将其作为整数排序。SQL语句按字符版本对其进行排序,而不考虑使用SELECT语句返回整数这一事实


假设我是正确的,要解决这个问题,您需要将源系统上的数据排序为整数,即,
orderbycast(EXTERNAL\u ID as integer)

您的oracle db连接键不是
oracle\u UNIQUE\u ID
是的,不是。Oracle的联接键是外部id(排序顺序1)。数据是否已预排序?即在两个查询中都按顺序排序?SSIS数据类型匹配吗?两者都是预排序的(按源查询中的顺序)。oracle源列EXTERNAL_ID在查询中被强制转换为整数,即强制转换(EXTERNAL_ID为整数),因此在合并联接之前,两个联接键最终都被转换为DT_I4。两个问题:数据转换是什么,具体地说:它会影响键列吗?另外:Oracle数据源和合并联接周围的容器是什么?