2009-12-24 11 views
1

我需要從SQL Server 2005數據庫表中返回俄文文本。如何在此SQL示例中返回Unicode值?

在下面的例子是說明我的困境的一種簡單方式,@測試變量會打印出問號:

DECLARE @Test nvarchar(max) 
SET @Test = 'Баннер' 
PRINT @Test 

(注意@測試值是俄文本,對於那些誰不「T已安裝的字體)

但是,如果我的代碼更改爲以下,@測試變量會打印出想要的文字:

DECLARE @Test nvarchar(max) 
SET @Test = N'Баннер' 
PRINT @Test 

這裏是我想知道:

在我的現實世界的例子,我做一個存儲過程如下:

EXEC usp_GetContent @Content = @Test 

爲@Test的值是俄羅斯,而是被顯示爲問號。如果proc看起來像這樣,俄羅斯通過罰款:

EXEC usp_GetContent @Content = N'Баннер' 

但這不是我的可能性;我需要傳入一個變量。

有什麼建議嗎?

謝謝。

回答

0

只要存儲過程參數被定義爲Unicode如nvarchar和調用代碼明確定義了與相同類型的命令時,它應該正常工作的參數對象。

當你用SQL編寫它你通過在你的第一個例子中一個VARCHAR,因此它沒有理解它。

的問題是該行:

SET @Test = 'Баннер' 

不是存儲過程。

0

有2個可能的原因會讓你問號。無論是在存儲的proc調用之前設置變量,您都不會輸入'N'。或者當您打印輸出時,結果字體不支持雙字節字符。

0

這個查詢:

SELECT COLLATIONPROPERTY(CAST(SERVERPROPERTY('Collation') AS NVARCHAR), 'CodePage') 

將返回服務器的默認代碼頁,其最有可能會從1251866不同。

當您使用此常數:

'Баннер' 

,服務器將嘗試它得到了從代碼頁連接到俄羅斯的東西符號轉換。

但你的代碼頁437(或任何你有)不允許這種轉換,這就是爲什麼字符獲取與問號代替。