将应用程序从SQL Server 2012
迁移到SQL Server 2017
。
我对数据导入运行以下两个查询(Name
是varchar
列,其中包含非英文字母)。
select Name from RemoteServer.RemoteDB.dbo.RemoteView
select coalesce(Name,'') from RemoteServer.RemoteDB.dbo.RemoteView
在SQL 2012上,结果相同。在SQL 2017上,我看到以下内容:
可能是什么原因?
很遗憾,我无法将远程服务器上的数据类型更改为nvarchar
。
更新:更多信息。
链接服务器的属性相同(在SQL 2012
上编写链接服务器的脚本,并使用该脚本在SQL 2017
上创建它)。
在两台服务器上(出于历史原因),服务器排序规则(以及系统数据库的排序规则)为Cyrillic_General_CI_AS
,我的数据库排序规则为SQL_Latin1_General_CP1251_CI_AS
。
在远程服务器上,服务器归类和数据库归类均为Cyrillic_General_CI_AS
。
在SQL 2012
上,两个查询都在任何数据库的上下文中显示数据。
在SQL 2017
上,它在系统数据库上以及在我的数据库上均显示良好的效果。因此,它取决于数据库排序规则。
答案 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;