跳到主要内容
常见问题 SQL Server排序规则字符集

排序规则不一致导致比较报错怎么办

两表连接/比较报「无法解析排序规则冲突」的原因:两侧排序规则不同,用 COLLATE 显式指定或统一排序规则。

发布于 2026/11/11 所属频道 SQL Server

简短答案

两个表的字符串列排序规则不同(如一个 Chinese_PRC、一个 Latin1_General),直接比较/连接会报「无法解析排序规则冲突」。临时用 COLLATE 显式指定,长期统一库内排序规则。

排查步骤

  1. 查各表列的排序规则:
SELECT t.name AS table_name, c.name AS col, c.collation_name
FROM sys.columns c JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.type IN ('char','varchar','nvarchar','nchar','nvarchar','text','ntext');
  1. 查库默认排序规则:SELECT collation_name FROM sys.databases;
  2. 临时解法——比较处显式指定同一排序规则:
SELECT * FROM a
JOIN b ON a.列 COLLATE Chinese_PRC_CI_AS = b.列 COLLATE Chinese_PRC_CI_AS;
  1. 长期方案:新库建库时统一排序规则;旧库改列排序规则用 ALTER TABLE ... ALTER COLUMN(会重建该列,生产库要择时)。
  2. 在 SSMS 表设计器里可看列属性中的排序规则。
  3. 各版本排序规则支持范围以 SQL Server 2022 Developer 条目页核对。

现象对照表

现象 原因
两表 JOIN 报排序规则冲突 列排序规则不同
与字面量比较报错 列排序规则非库默认
跨库连接报错 两库默认排序规则不同

操作小结

  1. 先查列的 collation_name,确认两侧差异。
  2. 临时用 COLLATE 兜底,长期统一排序规则。
  3. 改列排序规则要评估重建成本。

相关链接

本文内容基于公开资料整理,仅供参考;涉及授权与合规的操作请以厂商官方文档为准。

相关推荐下载

按本文主题匹配的官方原版镜像条目

配套 PE 工具

制作启动盘、备份数据、修复引导

其他常见问题

同一集合内的相近主题,按标签与关键词匹配