开篇介绍

前几天碰到这样的一个问题,在 Lookup 中如何设置大小写不敏感比较,即如何在 Lookup 中的字符串比较时不区分大小写?

实际上就这个问题已经有很多人提给微软了,但是得到的结果就是 Closed and Won’t fix。 说白了,这个就是 By Design,包括到现在的 2012 也没有这个配置选项。

https://connect.microsoft.com/SQLServer/feedback/details/339069/ssis-case-sensitive-data-flow-components

https://connect.microsoft.com/SQLServer/feedback/details/311209/ssis-sql-server-2008-add-case-insensitive-search-ability-to-lookup-component

看看大家的抱怨,其实还是非常期望能够加上这个功能的。

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 博客推荐栏中快速看到这些文章。

微软BI 之SSIS 系列 - Lookup 中的字符串比较大小写处理 Case Sensitive or Insensitive的更多相关文章

  1. 微软BI 之SSIS 系列 - 数据仓库中实现 Slowly Changing Dimension 缓慢渐变维度的三种方式

    开篇介绍 关于 Slowly Changing Dimension 缓慢渐变维度的理论概念请参看 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型 ...

  2. 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache, NO Cache

    开篇介绍 先简单的演示一下使用 Lookup 组件实现一个简单示例 - 从数据源表 A 中导出数据到目标数据表 B,如果 A 数据在 B 中不存在就插入新数据到B,如果存在就更新B 和 A 表数据保持 ...

  3. 微软BI 之SSIS 系列 - 再谈Lookup 缓存

    开篇介绍 关于 Lookup 的缓存其实在之前的一篇文章中已经提到了 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache ...

  4. 微软BI 之SSIS 系列 - 在 SSIS 中导入 ACCESS 数据库中的数据

    开篇介绍 来自 天善学院 一个学员的问题,如何在 SSIS 中导入 ACCESS 数据表中的数据. 在 SSIS 中导入 ACCESS 数据库数据 ACCESS 实际上是一个轻量级的桌面数据库,直接使 ...

  5. 微软BI 之SSIS 系列 - MVP 们也不解的 Scrip Task 脚本任务中的一个 Bug

    开篇介绍 前些天自己在整理 SSIS 2012 资料的时候发现了一个功能设计上的疑似Bug,在 Script Task 中是可以给只读列表中的变量赋值.我记得以前在 2008 的版本中为了弄明白这个配 ...

  6. 微软BI 之SSIS 系列 - 使用 Script Component Destination 和 ADO.NET 解析不规则文件并插入数据

    开篇介绍 这一篇文章是 微软BI 之SSIS 系列 - 带有 Header 和 Trailer 的不规则的平面文件输出处理技巧 的续篇,在上篇文章中介绍到了对于这种不规则文件输出的处理方式.比如下图中 ...

  7. 微软BI 之SSIS 系列 - 使用 Script Task 访问非 Windows 验证下的 SMTP 服务器发送邮件

    原文:微软BI 之SSIS 系列 - 使用 Script Task 访问非 Windows 验证下的 SMTP 服务器发送邮件 开篇介绍 大多数情况下我们的 SSIS 包都会配置在 SQL Agent ...

  8. 微软BI 之SSIS 系列 - 带有 Header 和 Trailer 的不规则的平面文件输出处理技巧

    案例背景与需求介绍 之前做过一个美国的医疗保险的项目,保险提供商有大量的文件需要发送给比如像银行,医疗协会,第三方服务商等.比如像与银行交互的 ACH 文件,传送给协会的 ACH Credit 等文件 ...

  9. 微软BI 之SSIS 系列 - Merge, Merge Join, Union All 合并组件的使用以及Sort 排序组件同步异步的问题

    开篇介绍 SSIS Data Flow 中有几个组件可以实现不同数据源的数据合并功能,比如 Merger, Merge Join 和 Union All.它们的功能比较类似,同时也比较容易混淆,下面是 ...

随机推荐

  1. python+selenium十二:一个输入框双层input标签

    先点击第一个,再对第二个进行操作,否则操作失败 driver.find_element_by_css_selector(".pwd").click()driver.find_ele ...

  2. Java_myeclipse添加DTD约束(框架xml只能提示功能)

    以struts2中的xml为例 struts-2.3.4-all\struts-2.3.4\src\core\src\main\resources

  3. Myeclipse启动不了的解决方法

    Myeclipse启动不了的解决方法    我们在开发过程中经常在加载大工程时由于项目很大,导致编译时间很长.或是其他原因导致进度条有时候一直在不停地跑,占用了大量内存,在无奈之下直接将进程kill掉 ...

  4. IDA Pro的patch插件 KeyPatch

    本来这个是没什么可写的,但是安这个插件的时候真是气到爆炸,安装文档写的不明不白,几万行的代码都写了就差那么点时间写个几十字的详细说明吗? 1.下载keypatch.py放到\IDA\plugins里 ...

  5. [转]oracle10客户端PL/SQL Developer如何连接远程服务器上的oracle数据库

    时间:2013年8月21日 前提条件:假设你已经安装好了oracle和PL/SQL Developer,知道远程服务器的IP和数据库端口,知道远程服务器上的oracle数据库名和密码 如何用PL/SQ ...

  6. GYM 101673 A - Abstract Art 多个一般多边形面积并

    A - Abstract Art #include<bits/stdc++.h> #define LL long long #define fi first #define se seco ...

  7. split应用

    /* input:"5 35 53 2 3" output:"2 3 5 35 53" */ public class RegexDemo4 { public ...

  8. Scrapy爬虫学习笔记 - 爬虫基础知识

    一.正则表达式 二.深度和广度优先                                三.爬虫去重策略

  9. AndroidStudio 之 Inter x86 Emulator Accelerator(Haxm installer) - not compatible with windows

  10. Redis工具类

    /** * Copyright © 2012-2016 * <a href="https://github.com/thinkgem/smkj">smkj</a& ...