2013-05-07 92 views
0

我正在使用sql server 2012及其後端爲asp.net mvc多語言應用程序。多語言數據的sql server整理

我已經將數據庫的排序規則設置爲「sql_latin1_general_cp1_ci_as」。

這個數據庫存儲,英語,俄語,阿拉伯語等數據,因此我將在整理問題,我的存儲過程運行將訪問我的數據有where子句,ORDER BY子句等

我有我爲其訪問語言數據的一組存儲過程。我正在尋找如何解決我的問題的選項。

我在想爲每組數據創建一個視圖並在其上指定排序規則。我將永遠不會有我將用不同語言查詢的場景。或者,我可以在存儲過程中指定排序規則,但這意味着我的存儲過程對於每個排序規則會有所不同。

對於這裏的排序規則挑戰有什麼建議或想法?

回答

0

對於初學者,您會希望所有列都是nvarchar。這將照顧你的存儲問題。至於排序和過濾,那麼整理就像你說的那樣變得重要。

根據您對數據的處理方式以及您需要使用多少列進行過濾和排序以及您如何執行操作,一種方法是使用動態sql。你可以做類似

declare @collation sysname = 'Latin1_General_CI_AS' 
declare @cmd nvarchar(max) 
set @cmd = 'select * from person order by last_name collate ' + @collation 
exec sp_executesql @cmd 

這不是一個很好的解決方案,但它的工作原理。您也可以在視圖中的任何字段之後拋出排序規則,如您所述,這是一個選項。就像這樣,然後你可以查詢它而不必指定排序規則。

create view v_Person_RU as 
select first_name collate Cyrillic_General_CI_AI, last_name collate Cyrillic_General_CI_AI... 

create view v_Person_AR as 
select first_name collate Arabic_CI_AI, last_name collate Arabic_CI_AI... 

然後,您可以使用只需選擇正確的視圖用於查詢。

0

這可能是有益的你 -

SELECT DATABASEPROPERTYEX('<your_db>', 'collation') 

SELECT * 
FROM dbo.table1 t 
ORDER BY string_column COLLATE database_default -- i.e. sql_latin1_general_cp1_ci_as