SQL Server中UNION ALL语句排序规则冲突问题求助
解决UNION ALL的排序规则冲突问题
这个错误是因为两个查询的第2列(CodUnitate)使用了不同的排序规则:SQL_Latin1_General_CP1_CI_AS(不区分大小写)和SQL_Latin1_General_CP1_CS_AS(区分大小写),而UNION ALL要求对应列的排序规则必须一致。
解决方案:显式统一列的排序规则
在其中一个查询的CodUnitate列上通过COLLATE关键字指定目标排序规则,和另一列保持一致即可。以下是修改后的SQL:
select Regiune, CodUnitate, DataAprobare, UnitateaABR, ActivationDate, LocatieNoua into #tb from #mainunion where CanalVanzare in ('Sucursala', 'Alpha Point', 'Call Center', 'Broker', 'Real Estate') union all select Regiune, CodUnitate COLLATE SQL_Latin1_General_CP1_CI_AS, -- 与#mainunion的CodUnitate排序规则对齐 DataAprobare, UnitateaABR, ActivationDate, LocatieNoua from #addon
如果需要统一为区分大小写的排序规则,只需将COLLATE后的规则改为SQL_Latin1_General_CP1_CS_AS即可。
可选:先确认列的排序规则
如果不确定哪一方的排序规则符合业务需求,可以先查询两个临时表中CodUnitate列的当前排序规则:
-- 查看#mainunion的CodUnitate排序规则 SELECT name, collation_name FROM tempdb.sys.columns WHERE object_id = OBJECT_ID('tempdb..#mainunion') AND name = 'CodUnitate'; -- 查看#addon的CodUnitate排序规则 SELECT name, collation_name FROM tempdb.sys.columns WHERE object_id = OBJECT_ID('tempdb..#addon') AND name = 'CodUnitate';
根据业务需求选择要统一的目标排序规则后,再修改查询即可。
内容的提问来源于stack exchange,提问作者CalinG
相关产品推荐
相关产品推荐

