在我的包中,当我基于完整缓存模式查找值时,即使查找表和源中的数据类型和值相同,它也会变为不匹配输出。也没有重复的行。当我设置“无缓存”模式时,它匹配正确。任何建议为什么会这样?
问问题
2539 次
2 回答
2
全缓存
查找的默认缓存模式是完整缓存。在这种模式下,数据库在数据流的预执行阶段被查询一次。整个参考集被拉入内存。[...] 需要注意的一点是,查找不会将内存交换到磁盘,因此如果内存不足,您的数据流将会失败。
( source ) 这意味着所有比较操作都由区分大小写和尾随空格的 SSIS 引擎完成。这意味着,这'abc' <> 'Abc' | 'ABC'
也意味着'abc' <> 'abc '
(abs 加上字符串末尾的一个空格)。
由于上述原因,如果源值是'abc'
并且参考数据是'ABC' or 'ABC '
=> No Match
。
没有缓存
顾名思义,在这种模式下,查找转换不维护查找缓存(实际上,并不完全正确——我们保留最后一个匹配项,因为内存已经分配)。在大多数情况下,这意味着您将访问数据库的每一行。
(来源)
- 如果触摸 [SQL Server] 数据库并且
- 如果列排序规则不区分大小写(我的所有数据库都是 CI =>
'abc' = 'Abc' | 'ABC'
)并且 - 因为尾随空格无关紧要 (
'abc' = 'abc ' | 'Abc ' | 'Abc '
)
由于上述原因,如果源值是'abc'
并且参考数据是'ABC' or 'ABC '
=> Match
。
于 2016-05-15T06:13:19.897 回答
0
如果在大小写或数据类型或数据长度方面存在任何不匹配,则查找匹配精确值,它将告诉不匹配。
检查输入和查找数据的数据类型、长度、大小写。
于 2016-05-15T05:24:05.023 回答