Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 SSIS查找行为很奇怪_Sql Server_Ssis - Fatal编程技术网

Sql server SSIS查找行为很奇怪

Sql server SSIS查找行为很奇怪,sql-server,ssis,Sql Server,Ssis,我有一个行为异常的SSIS查找。在大多数情况下,它可以很好地匹配数据,但在许多情况下,当data viewer显示数据匹配时,它不会提供匹配。真正奇怪的是,查找连接使用的SQL查询没有where子句。如果我将SQL查询更改为包含where子句,该子句只返回与不匹配的行相似的行,然后重新运行它;然后数据匹配 例如,如果SQL查询为: Select ColumnA, ColumnB From TableA ColumnA是我正在寻找的匹配项,ColumnB是我想要添加到数据流中的 查询提供如下结果

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

例如,如果SQL查询为:

Select ColumnA, ColumnB
From TableA
ColumnA是我正在寻找的匹配项,ColumnB是我想要添加到数据流中的

查询提供如下结果

AA, B

AC, D

BE, F

BG, H
(所有数据均为大写,因此不存在问题)

我要匹配的输入列是AC,但没有返回匹配项(它返回AA和BG的匹配项)。但是,如果我将查询更改为包含where子句,如下所示: 其中ColumnA类似于“A%”(仅返回两行)

然后我找到一根火柴。
以前有没有人见过类似的情况并对此进行过修复?

我怀疑您的示例过于简化了

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

在完全缓存模式下的SSI查找只能在内存中进行。这意味着比较是在SSIS组件内完成的,不需要注意数据库排序规则。因此,很容易出现你在原始帖子中提到的大写问题

可能有细微的区别:

  • 前导或尾随空格
  • 重音字符或其他不受排序规则影响的字符
  • 不同的数据类型。例如,如果您在数字数据类型上执行查找,则如果数据类型完全相同,则仅匹配。(24.00与24.0不匹配)

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

我怀疑您的示例过于简化

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

在完全缓存模式下的SSI查找只能在内存中进行。这意味着比较是在SSIS组件内完成的,不需要注意数据库排序规则。因此,很容易出现你在原始帖子中提到的大写问题

可能有细微的区别:

  • 前导或尾随空格
  • 重音字符或其他不受排序规则影响的字符
  • 不同的数据类型。例如,如果您在数字数据类型上执行查找,则如果数据类型完全相同,则仅匹配。(24.00与24.0不匹配)

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

我找到了答案,但我想说的是,所有关于通过删除前导/尾随空格等强制精确匹配的建议都已经尝试过了


我发现,对于某些数据,不相关的函数调用将失败并停止查询,但在查找过程中,它将以静默方式失败,包将继续运行。我从未见过查询失败不会导致包失败,但在本例中就是这样。因此,当这种情况发生时,本应匹配的数据不会添加到查找缓存中,也不会找到匹配项。当使用仅返回类似行的where子句限制查询时,将不会发生故障,并且数据将匹配。这就是为什么这种行为看起来如此奇怪。我不知道为什么当查询失败时包不会失败。在我看来,包应该失败,因为查询出错,而不是停止查询并继续包。

我找到了答案,但我想指出,所有关于通过删除前导/尾随空格等强制精确匹配的建议都已经尝试过了


我发现,对于某些数据,不相关的函数调用将失败并停止查询,但在查找过程中,它将以静默方式失败,包将继续运行。我从未见过查询失败不会导致包失败,但在本例中就是这样。因此,当这种情况发生时,本应匹配的数据不会添加到查找缓存中,也不会找到匹配项。当使用仅返回类似行的where子句限制查询时,将不会发生故障,并且数据将匹配。这就是为什么这种行为看起来如此奇怪。我不知道为什么当查询失败时包不会失败。在我看来,包应该失败,并出现有关查询的错误,而不是停止查询并继续包。

您是在尝试匹配相等的列还是包含某些值的列?添加两个表的清晰示例我无法进行示例;涉及专有和私有数据。我举的例子说明了这个问题。源中的列是AC,它必须与提供AC的查询中的列匹配。如果您以前从未见过类似的内容,则可能没有答案。
选择RTRIM(ColumnA)作为ColumnA,ColumnB
并确保已将RTRIM应用于SourceA-现在是否获得匹配项?在查找中查询的表中有多少行?你到底在使用缓存吗?如果这不是一个案例问题,那么可能是尾随空格。这些列在SQL中被忽略,但在SSI中很重要。您是在尝试匹配相等的列还是包含某些值的列?添加两个表的清晰示例我无法进行示例;涉及专有和私有数据。我举的例子说明了这个问题。源中的列是AC,它必须与提供AC的查询中的列匹配。如果您以前从未见过类似的内容,则可能没有答案。
选择RTRIM(ColumnA)作为ColumnA,ColumnB
并确保已将RTRIM应用于SourceA-现在是否获得匹配项?在查找中查询的表中有多少行?你到底在使用缓存吗?如果这不是一个案例问题,那么可能是尾随空格。这些在SQ中被忽略