为什么排序规则不适用于子查询中的 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
我通常使用 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