2016-06-01 119 views
0

我正在將數據庫和etl從MySQl遷移到SQL Server,並遇到大小寫敏感問題。 在MySql中,數據庫設置爲區分大小寫,因爲我們加載的應用程序中的一個應用程序的代碼像'Divh'和'divh'在一個集合中(它不是我的) 一切都很好,在etl中的位置,查詢報告等都使用了作者想要的任何情況 - 有些都是UPPER,一些是最低的混合。 因此,換句話說,MYSQL具有不區分大小寫的DDL和SQL,但允許區分大小寫的數據。SQL Server 2014區分大小寫敏感問題

它看起來不像SQL Server可以容納這個。如果我選擇一個CI排序規則,所有的表和列與數據都是不敏感的(假定)。和相反 - 如果它的CS一切都區分大小寫。 我看完了嗎? 如果是這樣,那麼我必須更改DB 中每個文本列的排序規則,或編輯每個查詢。

具有諷刺意味的是,第一個測試是使用相同排序規則(SQL_Latin1_General_CP1_CS_AS) 設置的Azure SQL數據庫,它不關心select中表名的情況。

任何想法?

感謝 JC

回答

1

首先,你知道,在SQL Server的各個層面存在的排序規則設置;實例,數據庫,表甚至字段級別。

聽起來好像你只是想爲受影響的字段強制區分大小寫的排序規則,使整個數據庫和DDL不區分大小寫。

我過去使用的另一個技巧是將值轉換爲VARBINARY數據類型,如果您想在不同情況下進行數據比較,但不需要更改任何內容的排序規則。

例如:

DECLARE @Var1 VARCHAR(5) 
DECLARE @Var2 VARCHAR(5) 

SET @Var1 = 'Divh' 
SET @Var2 = 'divh' 

--Comparison1: 
IF @Var1 = @Var2 
    PRINT 'Same' 
ELSE 
    PRINT 'Not the same' 

--Comparison2: 
IF CAST(@Var1 AS VARBINARY) = CAST(@Var2 AS VARBINARY) 
    PRINT 'Same' 
ELSE 
    PRINT 'Not the same' 
+0

保羅感謝小費。是的,我想保持數據庫不區分大小寫,但大約200列需要區分大小寫。我試圖說服建模工具通過更改數據域來生成這個數據,所以我不必在這麼多列上打破鏈接。 – jc508