完全缓存查找不匹配应匹配的记录

时间:2016-05-14 08:35:32

标签: sql-server ssis lookup-tables ssis-2008 msbi

在我的软件包中,当我基于FULL Cache Mode查找一个值时,即使查询表和源中的数据类型和值相同,它也不会出现匹配输出。也没有重复的行。 当我把'没有缓存'模式,它正确匹配。有什么建议为什么会这样?

2 个答案:

答案 0 :(得分:1)

完整缓存

  

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

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

由于上述原因,如果源值为'abc'且参考数据为'ABC' or 'ABC ' =&gt; No Match

无缓存

  

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

source

  1. 如果触摸了[SQL Server]数据库并且
  2. 如果列排序规则不区分大小写(我的所有数据库都是CI =&gt; 'abc' = 'Abc' | 'ABC')并且
  3. 因为尾随空格无关紧要('abc' = 'abc ' | 'Abc ' | 'Abc '
  4. 由于上述原因,如果源值为'abc'且参考数据为'ABC' or 'ABC ' =&gt; Match

答案 1 :(得分:0)

如果在大小写或数据类型或数据长度不匹配时,Lookup会匹配精确值,它会告诉不匹配。

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