我的存储过程包含参数@Name nvarchar(250)
之后执行一些插入过程,从另一个表中选择一些nvarchar(250)
文本到变量@msg nvarchar(300)
。
然后我将@msg
中的部分文字替换为@Name
变量:
set @msg = REPLACE(@msg, '[contentname]', @Name)
结果是@Name在使用除英语
之外的其他语言时被替换为问号我试过了
REPLACE(@msg, '[contentname]', @Name COLLATE SQL_Latin1_General_CP1_CI_AS)
当我用户打印@Name
时,它会正确显示非英语/阿拉伯语文本
有人可以给我一些想法吗?
由于
答案 0 :(得分:1)
如果您要指定NVARCHAR
字符串文字,则需要在其前面添加N
字符:
set @msg = REPLACE(@msg, N'[contentname]', @Name)
否则,如果不这样做,SQL Server很可能会将所有内容转换为VARCHAR
(因为您省略了N
前缀)。