0

在我的包中,当我基于完整缓存模式查找值时,即使查找表和源中的数据类型和值相同,它也会变为不匹配输出。也没有重复的行。当我设置“无缓存”模式时,它匹配正确。任何建议为什么会这样?

4

2 回答 2

2

全缓存

查找的默认缓存模式是完整缓存。在这种模式下,数据库在数据流的预执行阶段被查询一次。整个参考集被拉入内存。[...] 需要注意的一点是,查找不会将内存交换到磁盘,因此如果内存不足,您的数据流将会失败。

( source ) 这意味着所有比较操作都由区分大小写和尾随空格的 SSIS 引擎完成。这意味着,这'abc' <> 'Abc' | 'ABC'也意味着'abc' <> 'abc '(abs 加上字符串末尾的一个空格)。

由于上述原因,如果源值是'abc'并且参考数据是'ABC' or 'ABC '=> No Match

没有缓存

顾名思义,在这种模式下,查找转换不维护查找缓存(实际上,并不完全正确——我们保留最后一个匹配项,因为内存已经分配)。在大多数情况下,这意味着您将访问数据库的每一行。

来源

  1. 如果触摸 [SQL Server] 数据库并且
  2. 如果列排序规则不区分大小写(我的所有数据库都是 CI => 'abc' = 'Abc' | 'ABC')并且
  3. 因为尾随空格无关紧要 ( 'abc' = 'abc ' | 'Abc ' | 'Abc ')

由于上述原因,如果源值是'abc'并且参考数据是'ABC' or 'ABC '=> Match

于 2016-05-15T06:13:19.897 回答
0

如果在大小写或数据类型或数据长度方面存在任何不匹配,则查找匹配精确值,它将告诉不匹配。

检查输入和查找数据的数据类型、长度、大小写。

于 2016-05-15T05:24:05.023 回答