SSIS查找行为很奇怪

时间:2016-04-22 15:41:27

标签: sql-server ssis

我有一个奇怪的SSIS查找。它在大多数情况下很好地匹配数据,但在许多情况下,当数据查看器显示数据匹配时,它们不匹配。真正奇怪的是查找连接使用没有where子句的SQL查询。如果我更改SQL查询以包含where子句,该子句仅返回与不匹配的行相似的行并重新运行它;然后数据匹配。

例如,如果SQL查询是:

Select ColumnA, ColumnB
From TableA

ColumnA是我正在寻找匹配的人,而ColumnB是我想要添加到数据流的那个。

查询提供了这样的结果

AA, B

AC, D

BE, F

BG, H

(所有数据都是大写的,所以这不是问题)

我要匹配的输入列是AC,但不返回匹配项(它返回AA和BG的匹配项)。然而,如果我更改查询以包含这样的where子句: ColumnA喜欢' A%' (只返回两行)

然后我得到了一个匹配。 有没有人见过这样的事情并且有一个修复?

2 个答案:

答案 0 :(得分:2)

我怀疑你的例子太简单了。

使用SSIS查找,必须了解数据库比较的差异。

完全缓存模式下的SSIS查找在内存中是专门完成的。这意味着比较是在SSIS组件内完成的,没有注意您的数据库排序规则。因此很容易出现你在原帖中提到的大写问题。

可能存在细微差别:

  • 前导或尾随空格
  • 强调字符或其他可能受整理影响的内容
  • 不同的数据类型。例如,如果对numeric数据类型进行查找,则只要具有完全相同的数据类型即匹配。 (24.00与24.0不符)......

希望解决方案是以上之一。

答案 1 :(得分:0)

我找到了答案,但我想评论所有关于通过删除前导/尾随空格等来强制完全匹配的建议已经尝试过了。

我发现不相关的函数调用对于某些数据会失败并停止查询但在查找中它会无声地失败并且程序包将继续运行。我从来没有看到查询失败不会导致程序包失败,但在这种情况下发生了这种情况。因此,当发生这种情况时,应该匹配的数据将不会添加到查找缓存中,并且不会找到匹配项。当使用只返回类似行的where子句限制查询时,不会发生故障并且数据将匹配。这就是为什么这种行为似乎很奇怪。我不知道为什么在查询失败时包不会失败。在我看来,该软件包应该失败并显示有关查询的错误,而不是仅仅停止查询并继续执行包。