2014-02-27 63 views
1

嗯,我知道在論壇中有一些類似的問題,但仍然沒有明確的解決方案。如何將N(unicode)添加到一個變量(已經在變量中的值)

我想添加N到一個變量來存儲雙字節(日語)到db表中,但我不知道如何將N添加到變量。

該值已經存在於變量@value中,它從CSV文件中自動獲取其值(日語)。

我想要做的是將值插入到具有正確日文字符的數據庫表中。所以,我沒有

declare @finalValue nvarchar(255); 
    set @[email protected]; --obviously, it is NOT correct. 
    --insert ........ 

我應該怎麼插入正確@finalValue到表嗎?

+0

是否沒有N功:

你可以,但是,明確使用convert()功能強迫你變量放到正確的類型? –

+0

我想將日語插入表格中,其值來自CSV文件。 '@value'被聲明爲nvarchar來存儲來自csv文件的值。但在這一刻,如果我插入'@value',仍然顯示「???」在db表中。所以我必須添加N到'@value',然後將其插入表中。有什麼辦法可以實現嗎?或者一種替代方式? – Kurt

+0

你如何閱讀文本文件?聽起來就像你在閱讀時沒有使用正確的代碼頁。 「 –

回答

0

你試過嗎?

declare @finalValue nvarchar(255); 
set @finalValue=cast(@value as nvarchar(255)) 

也隱式轉換工作以及..如果你有一個尺寸不匹配可能會得到截斷警告。

declare @finalValue nvarchar(255); 
set @[email protected] 
+0

不工作。當從CSV文件獲取值時,'@value'已經被聲明爲nvarchar。 – Kurt

+1

如果您的@value已經設置爲Unicode,並且您仍然收到「?」值...源不是以unicode開始的。你必須從東亞字符集轉換爲Unicode。換句話說,問題不是價值 - > finalvalue,但..源 - >價值。我希望這是有道理的。 –

+0

看看http://search.cpan.org/~hio/Unicode-Japanese-0.49/lib/Unicode/Japanese.pm –

1

N'some text'是限定雙字節字符串文字的一種方式。您不要將它用於Transact-SQL變量。

你的@value變量的數據類型是什麼?在大多數情況下,您可以這樣做:

create table foo (dbcs_string nvarchar(2000) not null) 
... 
declare @my_variable varchar(2000) 
set @my_variable = 'the quick brown fox jumped over the lazy dog.' 
... 
insert foo (dbcs_string) values (@my_variable) 

並且轉換將隱式完成。

convert(nvarchar(2000),@my_variable) 
+1

我想將日語插入表格中,其值來自CSV文件。 '@value'被聲明爲nvarchar來存儲來自csv文件的值。但在這一刻,如果我插入'@value',仍然顯示「???」在db表中。所以我必須添加N到'@value',然後將其插入表中。有什麼辦法可以實現嗎?或者一種替代方式? – Kurt

相關問題