微軟BI 之SSIS 系列 - Lookup 中的字符串比較大小寫處理 Case Sensitive or Insensitive


開篇介紹

前幾天碰到這樣的一個問題,在 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 博客推薦欄中快速看到這些文章。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM