2016-10-11 1 views
0

Ma procédure stockée a paramètre @Name nvarchar(250)SQL Server Remplacer des points d'interrogation de retour de la fonction pour les caractères non anglais

Il fait une procédure d'insertion après cela, sélectionnez un texte nvarchar(250) d'une autre table dans la variable @msg nvarchar(300).

Puis-je remplacer une partie de ce texte dans @msg avec la variable @Name:

set @msg = REPLACE(@msg, '[contentname]', @Name) 

Le résultat est @Name est remplacé par des points d'interrogation lors de l'utilisation une autre langue que l'anglais

J'ai essayé

REPLACE(@msg, '[contentname]', @Name COLLATE SQL_Latin1_General_CP1_CI_AS) 

lorsque l'utilisateur imprime @Name il affiche correctement le texte non anglais/arabe

Quelqu'un peut-il me donner des idées pour résoudre ce problème?

Merci

+1

Comment définissez-vous la valeur de @Name? par exemple. exécutez-vous la procédure stockée comme 'exec myProc @Name = N'XXXXXXX ';'? Ma première supposition serait juste que vous définissiez la valeur de @Name sans le préfixe N. – ZLK

+0

J'exécute la procédure en utilisant @ Name = N'XXXXXX 'avec le préfixe N mais ça n'aide pas, merci – Mosta

Répondre

0

Si vous souhaitez spécifier une chaîne NVARCHARlittérale, alors vous devez préfixe avec un caractère N:

set @msg = REPLACE(@msg, N'[contentname]', @Name) 

Sinon, si vous ne le faites pas, SQL Le serveur convertira probablement tout en VARCHAR (puisque vous avez omis le préfixe N).

+0

J'ai essayé ça aussi, ça n'a pas aidé, merci – Mosta