2010-01-05 405 views
2

我有一個問題,我正在嘗試解決。我們有一個運行商業ERP系統的SQL Server 2005。這意味着我們不能更改數據庫結構,並且所有字符字段都是CHAR或VARCHAR,而不是Unicode類型(NCHAR,NVARCHAR)。SQL Server 2005 CodePage問題

我們還有多個基於國家的ERP軟件實例。每個國家在同一個數據庫服務器上都有它自己的數據庫,這會導致表名稱根據正在運行的ERP軟件實例發生變化。例如,美國客戶表名爲US_CUSTOMER,英國客戶名爲GB_CUSTOMER。我們已經創建了一個單獨的數據庫,它基本上用同義詞反映ERP系統表,然後創建一個視圖來處理我們對這些同義詞的所有SQL事務。這是爲了使用LINQ TO SQL。感謝您閱讀本文:)

我們現在面臨的問題是我們現在正在爲應用程序實現簡體中文。在客戶ERP系統中,他們爲ERP系統設置代碼頁,以便當ERP系統寫入基表時,數據被寫爲多字節。我的問題是如何將這個多字節信息翻譯回簡體中文?我希望能夠在數據庫級別執行此操作,因爲我同時擁有需要利用它的Web應用程序和SSRS報告。

任何想法或方向?我不認爲我可以更改代碼頁,因爲多個國家正在使用相同的數據庫服務器(儘管不同的數據庫)。

由於時間

回答

0

的Remus的建議,我們最終什麼事做了,這是寫一個CLR函數,可以從我們的SQL語句被稱爲唯一賭注。我們傳入字符串和所需的代碼頁並獲取返回的轉換後的字符串。表現並非我們所希望的,但它似乎是我們能找到的唯一途徑。

1

提前難道我們說,2個VARCHAR字符正在使用來存儲一個Unicode字符?

如果是這樣,嘗試強制轉換爲二進制爲nvarchar等(或類似的東西)

否則,看COLLATE子句來強制數據?

編輯:

一個CLR函數可能是你使用的MultiByteToWideChar

+0

是的,兩個varchar字符存儲1個unicode字符。 – 2010-01-05 21:02:59

+1

演員我不認爲它會奏效。它會將多字節集中的每個單獨字節轉換爲與其相同的unicode。正確的翻譯是通過「MultiByteToWideChar」http://msdn.microsoft.com/en-us/library/cc500362.aspx,我不認爲這個功能可用作T-SQL – 2010-01-05 21:16:28

+0

@Remus:它是一個無論如何,長鏡頭,,, – gbn 2010-01-05 21:43:55