合并将非Unicode字符转换为问号

时间:2018-12-21 10:42:13

标签: sql-server sql-server-2017

将应用程序从SQL Server 2012迁移到SQL Server 2017

我对数据导入运行以下两个查询(Namevarchar列,其中包含非英文字母)。

select Name from RemoteServer.RemoteDB.dbo.RemoteView
select coalesce(Name,'') from RemoteServer.RemoteDB.dbo.RemoteView

在SQL 2012上,结果相同。在SQL 2017上,我看到以下内容:

1

可能是什么原因?

很遗憾,我无法将远程服务器上的数据类型更改为nvarchar

更新:更多信息。

链接服务器的属性相同(在SQL 2012上编写链接服务器的脚本,并使用该脚本在SQL 2017上创建它)。

在两台服务器上(出于历史原因),服务器排序规则(以及系统数据库的排序规则)为Cyrillic_General_CI_AS,我的数据库排序规则为SQL_Latin1_General_CP1251_CI_AS

在远程服务器上,服务器归类和数据库归类均为Cyrillic_General_CI_AS

SQL 2012上,两个查询都在任何数据库的上下文中显示数据。

SQL 2017上,它在系统数据库上以及在我的数据库上均显示良好的效果。因此,它取决于数据库排序规则。

2 个答案:

答案 0 :(得分:0)

问题不是合并函数,该函数基本上仅返回第一个非空值,而是问题是varchar数据类型而不是nvarchar,但是即使使用nvarchar时,也应使用N'Languageword',在此示例为了证明你。

DECLARE @Table AS TABLE
(
   RussianCol VARCHAR(100)
)

INSERT INTO @Table ( RussianCol )
VALUES ( 'спасбо' -- RussianCol - varchar(100)
       ),('Помогите')

SELECT * FROM @Table

答案 1 :(得分:0)

没有要测试的设置,但是您可以尝试:

select coalesce(Name collate Cyrillic_General_CI_AS,'')
from RemoteServer.RemoteDB.dbo.RemoteView;