2015-12-02 40 views
0

我讀了很多關於「選擇正確的排序規則」以及類似的東西,但我還沒有給下面的問題的解決方案:需要MsSQL整理建議。不區分大小寫的querys但大小寫敏感數據需要

我們得到了以下星座: 我們將應用程序的數據庫從Advantage數據庫切換到MsSQL Server 2014.

所有數據庫的排序規則均爲「Latin1_General_CI_AS」(ReportServer和ReportServerTempDB除外)。我們選擇了這種排序規則,因爲「Latin1_General_CS_AS」會對我們現有的查詢產生很大的影響,因爲查詢中的表名將更改爲區分大小寫。

要保留querys的數據順序,我們使用「Latin1_General_CS_AS」創建了字符串列。

我們實際上遇到的問題是,由於整理衝突,帶有連接到temptable的查詢失敗。我很清楚,TempDB表具有「Latin1_General_CI_AS」作爲整理,並在與物理表的字符串列連接時發出錯誤。

我們可以解決我們的問題,如果可以構建不區分大小寫的查詢而不考慮數據庫整理。

另一種解決方法是將數據庫的排序規則更改爲「Latin1_General_CS_AS」,並將查詢中的所有表名更正爲原始表名。

如果我想到的第一個解決方案是不可能的,那麼有人有一個很好的建議如何解決排序問題?

第二種解決方案實際上不可行。我們從來不關心大寫字母,而只是簡單地進行數據庫交互,因爲它值得它來糾正這一切。

對於我們的問題,可能有第三種解決方案還是第四種解決方案?

Thx 4提前幫助。

+0

當你加入,你可以將整理 - 表的連接表B在col1整理Latin1_General_CI_AS = COL2 – BeanFrog

+0

如果使用Unicode(nvarchar,nchar)不需要任何「正確」排序。如果你沒有,應該先修正一個錯誤。即使是歐盟的語言(如拉丁文,德文和西里爾文),也沒有可以處理的排序規則。 –

+0

@BeanFrog這不是一個解決方案,只是一個快速修復。在某些情況下,不會出現錯誤,但優化器將不能使用基礎索引 –

回答

0

要強制到最大,你可以使用COLLATE語句排序規則 見:https://msdn.microsoft.com/en-us/library/ms184391.aspx

SELECT 
a.col1,b.col2 
FROM 
table a join table b 
ON a.col1 collate databse_default = b.col2 collate databse_default 
+0

感謝您的回答,但正如我所說,我閱讀了很多排序規則,並且知道這種可能性。但這不是一個可行的解決方案。我們將不得不改變幾乎每個加入一個臨時表。 –