2016-09-26 60 views
1

在我的where子句中,如果我寫AND acts.displayname = N'Onaylanmış Rapor'我得到我想要的結果。但爲了參數化查詢,我發現NVARCHAR(MAX)參數仍然返回沒有特殊字符和全部的VARCHAR結果。在sql服務器參數中使用N前綴

我的問題的樣本是這樣的;

DECLARE @displayname NVARCHAR(MAX) 
    SET @displayname = 'Onaylanmış Rapor' 



    select @displayname as param, CONVERT(NVARCHAR(MAX),@displayname) as nvarconvert, CAST(@displayname as NVARCHAR(MAX)) as nvarcharcast 


+------------------+------------------+------------------+ 
|  param  | nvarconvert | nvarcharcast | 
+------------------+------------------+------------------+ 
| Onaylanmis Rapor | Onaylanmis Rapor | Onaylanmis Rapor | 
+------------------+------------------+------------------+ 

雖然我仍然需要參數'Onaylanmış Rapor'。

我試着將參數值轉換並轉換成nvarchar(max),但它也不起作用。

有沒有其他辦法?

+1

你可以強制轉換和轉換所有你喜歡的,但*輸入文字*需要能夠包含字符。 'N'OnaylanmışRapor''是一個Unicode文字和作品,'OnaylanmışRapor''沒有。變量已經分配後,轉換什麼都不做。如果您的參數儘管是「N(VAR)CHAR」,仍然無法運行,您需要調查發出查詢的客戶端代碼。 –

+0

SET @displayname =N'OnaylanmışRapor' – GuidoG

回答

3

SET @displayname ='OnaylanmışRapor'通過在撇號中的字符串將其隱式轉換爲非unicode。您需要硬編碼字符串中的unicode標識符。

DECLARE @displayname NVARCHAR(MAX) 
SET @displayname = N'Onaylanmış Rapor' 



select @displayname as param, CONVERT(NVARCHAR(MAX),@displayname) as nvarconvert, CAST(@displayname as NVARCHAR(MAX)) as nvarcharcast