2016-09-26 6 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識別子が必要です。

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 
関連する問題