Full Cache 查找不匹配应匹配的记录

Full Cache lookup is not matching record that should be matched

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

如果大小写、数据类型或数据长度不匹配,查找会匹配精确值。

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

完全缓存

The default cache mode for the lookup is Full cache. In this mode, the database is queried once during the pre-execute phase of the data flow. The entire reference set is pulled into memory. [...] One thing to note is that the lookup will not swap memory out to disk, so your data flow will fail if you run out of memory.

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

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

无缓存

As the name implies, in this mode the lookup transform doesn’t maintain a lookup cache (actually, not quite true – we keep the last match around, as the memory has already been allocated). In most situations, this means that you’ll be hitting the database for every row.

(source)

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

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