2

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

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

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

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

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

谢谢你们

4

1 回答 1

3

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

也就是说,这并不重要,因为 Merge Join 转换只允许您合并相同类型的数据。

合并联接需要对源系统数据进行排序。这可以通过将排序组件添加到流中来完成(不推荐,因为这是一种异步转换,会占用所有内存并降低性能),或者通过在源系统中显式排序,然后在“高级”选项卡中将它们标记为已排序。

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

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

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

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

于 2013-01-22T21:17:06.520 回答