SSIS Merge Join组件写了0行

时间:2013-01-22 20:55:46

标签: join ssis merge metadata

首先,感谢社区提供有关网站的大量信息,通过C#和SSIS为我提供了很多帮助。第二件事是我对英语不是很好,所以请耐心等待,如果你不明白,请问,我会努力让它变得更好。

我从不同的数据库获得了2个OLEDB连接源,两个表都有一个带有ID的列,我将其用作连接键。在RUT CRUZADOS中,ID是一个浮点数据类型,而在另一个源(CTACTEAÑOPAS)我不知道它是哪种类型的数据(我无法用sql server打开数据库,我只能做SELECT操作)。

当我在Merge中将它们组合时,它不会给我任何错误,但是当我运行程序时,会发生这种情况。

  

[SSIS.Pipeline]信息:“组件”CARGOS ABONOS“(239)”写的0   行。

在Microsoft Access中,“内部联接”返回类似于4百万行。我认为问题是它的元数据,但我不知道如何使用“数据转换”。有人可以帮帮我吗。

谢谢大家

1 个答案:

答案 0 :(得分:3)

您可以通过双击连接线来查看数据类型,至少就SSIS而言。在弹出的“数据流路径编辑器”中,“元数据”选项卡将描述列类型。

也就是说,没关系,因为Merge Join转换只允许您合并相同类型的数据。

Merge Join需要对源系统数据进行排序。这可以通过在流中添加排序组件来实现(不推荐这样做,因为这是一个消耗所有内存并导致性能下降的异步转换),或者在源系统中显式排序,然后在高级选项卡中将它们标记为已排序。 / p>

由于我没有看到排序,这使我相信排序是在源系统中完成的。或者,排序在那里完成,但有人已将输出标记为已排序。这些源查询中必须是明确的ORDER BY子句。有时,SQL Server将以相同的顺序返回数据,但除非有ORDER BY,否则无法保证。 (我希望我可以使用flash标签来强调最后一点)。

未来的读者,如果你在两个系统中都有一个排序并且它们都在同一列上排序,那么你需要检查排序规则。 Case Insensitive是一个与Case Sensitive不同的野兽,基于ASCII的系统排序产生的排序与使用EBCIDIC的混合字母数字不同,就像我曾经拥有的那样....

由于源数据类型似乎是浮点数,因此排序不是可能的罪魁祸首。我意识到这一点,而不是排序问题,你可能会有一个更丑陋和更阴险的比较问题。浮点数是近似值。 1 = 1但是1.00000000000(等)可能等于或等于1.0000000000(等)1

你真的需要小数位来进行比赛吗?如果不是这样,那么在两者中(并在CAST的值上排序)系统中转换为整数应该使这些匹配起作用。如果有重要的小数位,那么你将需要将其转换为精确的数字类型(并祈祷它们都以相同的方式转换)。 Access这样做的事实让我相信整数数据类型将是你的救赎。