为什么排序规则不适用于子查询中的 xml 路径?

Why collation doesn't work with for xml path in subquery?

我通常使用 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

在连接之前将其转换为 varchar

     select ('ěščřžýáíé' + '-' 
             + cast((select 'ěščřžýáíé' for xml path('')) as varchar(max))) 
               collate SQL_Latin1_General_CP1251_CI_AS