2016-04-22 91 views
0

我有一个行为奇怪的SSIS查找。它在大多数情况下都能很好地匹配数据,但在许多情况下,当数据查看器显示数据匹配时不提供匹配。真奇怪的是,查找连接使用不带where子句的SQL查询。如果我将SQL查询更改为包含只返回类似于不匹配的行的where子句并重新运行它;那么数据匹配。SSIS查找行为很奇怪

例如,如果SQL查询是:

Select ColumnA, ColumnB 
From TableA 

ColumnA是我在寻找一个匹配的人; ColumnB是一个我要添加到数据流。

查询提供这样

AA, B 

AC, D 

BE, F 

BG, H 

结果(所有数据都是大写所以这不是一个问题)

我输入列相匹配的交流,但没有匹配,返回(它返回AA和BG的匹配)。然而,如果我更改查询以包含这样的where子句: 其中ColumnA像'A%'(仅返回两行)

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

+0

您是否试图匹配等于或包含某些值的列?添加两个表格的明确样本 –

+0

我不能做一个样本;涉及私有和私有数据。我给出的例子说明了这个问题。来源的列是AC,它必须与提供AC的查询中的列匹配。如果你以前从未见过这样的事情,那么你可能没有答案。 – Thursty

+1

'SELECT RTRIM(ColumnA)AS ColumnA,ColumnB'并且还确保你有一个RTRIM应用于SourceA - 你现在得到匹配吗? – billinkc

回答

2

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

使用SSIS查找必须了解与数据库比较的区别。

完全缓存模式下的SSIS查找是在内存中独占完成的。这意味着比较在SSIS组件内完成,而不关注数据库整理。因此,你很容易在你原来的文章中提到大写字母的问题。

可能有细微的差别:

  • 开头或结尾的空格
  • 突出人物或别的东西miht通过整理
  • 不同的数据类型而受到影响。例如,如果您对数字数据类型进行查找,只要匹配具有完全相同的数据类型即可。 (24.00不匹配24.0)...

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

0

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

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