为啥排序规则不适用于子查询中的 xml 路径?
Posted
技术标签:
【中文标题】为啥排序规则不适用于子查询中的 xml 路径?【英文标题】:Why collation doesn't work with for xml path in subquery?为什么排序规则不适用于子查询中的 xml 路径? 【发布时间】:2020-06-29 12:03:50 【问题描述】:我通常使用collate SQL_Latin1_General_CP1251_CI_AS
来删除这样的重音符号(变音符号)。
select ('ěščřžýáíé' + '-' + (select 'ěščřžýáíé')) collate SQL_Latin1_General_CP1251_CI_AS
escrzyaie-escrzyaie
不幸的是,在其中一个搜索查询停止工作后,我发现在子查询中与 for xml path
结合使用时会忽略排序规则。
select ('ěščřžýáíé' + '-' + (select 'ěščřžýáíé' for xml path('')))
collate SQL_Latin1_General_CP1251_CI_AS
ěščřžýáíé-ěščřžýáíé
可以通过分别对每个部分使用排序规则来解决此问题,但我想知道为什么它在前面的示例中不起作用。
select ('ěščřžýáíé' collate SQL_Latin1_General_CP1251_CI_AS + '-'
+ (select 'ěščřžýáíé' collate SQL_Latin1_General_CP1251_CI_AS for xml path('')))
escrzyaie-escrzyaie
【问题讨论】:
【参考方案1】:在连接之前将其转换为 varchar
select ('ěščřžýáíé' + '-'
+ cast((select 'ěščřžýáíé' for xml path('')) as varchar(max)))
collate SQL_Latin1_General_CP1251_CI_AS
【讨论】:
您能解释一下为什么需要这样做吗?我想了解为什么没有它就行不通。以上是关于为啥排序规则不适用于子查询中的 xml 路径?的主要内容,如果未能解决你的问题,请参考以下文章