SQL Server替换函数返回非英文字符的问号

时间:2016-10-11 23:01:35

标签: sql sql-server localization collation

我的存储过程包含参数@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时,它会正确显示非英语/阿拉伯语文本

有人可以给我一些想法吗?

由于

1 个答案:

答案 0 :(得分:1)

如果您要指定NVARCHAR字符串文字,则需要在其前面添加N字符:

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

否则,如果不这样做,SQL Server很可能会将所有内容转换为VARCHAR(因为您省略了N前缀)。