好的。
你在說的N
不是一個函數,它可以做到。它是定義字符串文字的SQL語法的一部分。
單字節字符串文字
單字節字符串文字由導入在單引號('
),隨後通過除單引號其他零個或多個其他字符的,隨後通過引線 - 單引號('
)。爲了消除歧義,任何嵌入的單引號是通過加倍將它們轉義。字符串文字的詞彙值不包括導入/導出引號也不一倍內部逃逸,所以字符串文字
'That''s crazy!`
具有詞彙值
That's crazy!
這種字符串文字被定義爲由數據庫默認排序規則解釋的單字節字符串。此外,每個字符佔用一個字節。
因此,表達如
select *
from foo
where some_column = 'That''s crazy!'
是完全相同
declare @temp char(13) = 'That''s crazy!'
select *
from foo
where some_column = @temp
注意:雖然可以把Unicode字符,如Katagana或平假名在一個單字節字符串文字,你不可能得到你所期望的。
雙字節(Unicode)的字符串文字
雙字節(Unicode)的字符串文字以同樣的方式定義,除了文字與N
前綴,以表明它的特殊:
`N'That''s crazy!'
再有詞彙值
That's crazy!
,但在這種情況下,每個字符佔用兩個字節並且是Unicode UCS-2編碼。
再次,這樣的表達式
select *
from foo
where some_column = N'That''s crazy!'
是完全一樣
declare @temp nchar(13) = 'That''s crazy!'
select *
from foo
where some_column = @temp
所以......你的問題: 「我怎麼可以添加N個?」沒有意義。 N不是一個可以改變任何東西的函數。你不能把它應用到一個變量(你已經沒在聲明變量是nchar
類型或nvarchar
的。
你的問題在於你如何閱讀您的CSV文件,你如何獲取數據到您的@str
變量
我把'@str'的值放在一個csv文件中並保存爲unicode txt,然後將擴展名改回csv,然後用pentaho kettle進行處理,一個轉換文件與一個SP ,在SP'@str'中有來自csv文件的值並將其插入到db中。 – Kurt