微软BI 之SSIS 系列 - Lookup 中的字符串比较大小写处理 Case Sensitive or Insensitive
2014-08-19 12:52 BIWORK 阅读(2695) 评论(9) 编辑 收藏 举报开篇介绍
前几天碰到这样的一个问题,在 Lookup 中如何设置大小写不敏感比较,即如何在 Lookup 中的字符串比较时不区分大小写?
实际上就这个问题已经有很多人提给微软了,但是得到的结果就是 Closed and Won’t fix。 说白了,这个就是 By Design,包括到现在的 2012 也没有这个配置选项。
看看大家的抱怨,其实还是非常期望能够加上这个功能的。
Lookup 大小写的处理
还是来了解一下 Lookup 中这个特征吧。
通常情况下,我们一般选择的都是 Full Cache 全缓存模式(关于 Lookup 缓存的几种模式,大家可以参考我的另外一篇文章 - 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache, NO Cache)。选择全缓存模式就意味着在这个 Task 真正执行之前,在 Lookup 中的数据将全部首先被缓存,缓存完成之后再开始执行操作。但是在这里就要注意,如果选择的是全缓存,默认的字符串比较就是区分大小写的 CASE SENSITIVE 模式。
Full Cache 的时候采用的是 Windows Collations 中的区分大小写的比较方式。只有不使用 Full Cache 的时候才能使用到 SQL Collations。那我们知道,除了 Full Cache 外,还有 Partial Cache 部分缓存和 No Cache 不缓存。也就是说,如果使用了 Partial Cache 和 No Cache 缓存模式,使用的就是 SQL Collations。
那是不是采用了 Partial Cache 和 No Cache 就可以不区分大小写进行字符串比较呢?这种说法也不全正确!
因为这要取决于你 Lookup 中数据库本身的 Collations 设置 –
如果选择的 Collation 使用的是CI就是不区分大小写 (Case Insensitive),如果是CS(Case Sensitive)就是区分大小写。一般情况下,默认的都是 CI,所以这也就是很多人认为选择了 Partial Cache 或者 No Cache 就能区分大小写的原因,但是这个观点需要被纠正一下。
如何在使用 Lookup 的时候不区分大小写?
方法一
使用 Partial Cache 或者 No Cache 并确认 Lookup 中连接的数据源数据库的 Collation 是 Case Insensitive 方式。但是这种方式就意味着要放弃 Lookup 的 Full Cache,而在通常情况下,使用 Full Cache 的效率更高一些,参看- 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache, NO Cache。
方式二
还是使用 Full Cache,但是在进入 Lookup 的 Task 和 Lookup Task 本身的数据查询就不要使用表或者视图方式了,而是改为 T-SQL 查询的方式,那么通过设置两个比较源的 UPPER() / LOWER() 就可以达到忽略大小写比较的目的了! 当然如果上游数据是非数据表而是文件等其它类型,则可以使用其它比如 Derived Column 等使用函数来转变大小写也是可以的。
更多 BI 文章请参看 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server) 如果觉得这篇文章看了对您有帮助,请帮助推荐,以方便他人在 BIWORK 博客推荐栏中快速看到这些文章。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库