操作系統 :windows 2008 2R
MS SQL :MS SQL 2008
场景:
AA数据库(简体) 排序规则Chinese_PRC_CI_AS、
BB数据库(繁体)排序规则Chinese_Taiwan_Stroke_CI_AS
select * form AA..A a inner join BB..B b on b.中文字段 = a.中文字段 and B.year='2019'
注:在这种情景下当两表关联不是通过中文字段关联而是通过数值型关联时不会产生这种错误
产生错误:
消息 468,级别 16,状态 9,第 4 行
無法解析 equal to 作業中 "Chinese_Taiwan_Stroke_CI_AS" 與 "Chinese_PRC_CI_AS" 之間的定序衝突。
该错误产生的原因在于在SQL内部简繁体排序规则是不同的,存在简繁体表关联时会导致排序冲突。处理该问题的方式就是在字段后面增加排序规则,强制字段使用该实例默认的排序规则
SELECT SERVERPROPERTY('Collation') --查看当前数据库实例的排序规则
SELECT DATABASEPROPERTYEX ( '數據庫名稱' , 'Collation' )--查看数据库实例对应的排序规则
---查看排序规则对应的描述
SELECT name as 排序規則名稱,description as 排序規則的描述
FROM sys.fn_helpcollations()
WHERE name = 'Chinese_Taiwan_Stroke_CI_AS'
错误处理方式:
---正确的修改后语句
select * form AA..A a inner join BB..B b on b.ID Collate 'Chinese_Taiwan_Stroke_CI_AS' = a.ID and B.year='2019'
select * form AA..A a inner join BB..B b on b.ID = a.ID Collate 'Chinese_Taiwan_Stroke_CI_AS' and B.year='2019'
---错误的修改后语句
select * form AA..A a inner join BB..B b on b.ID = a.ID and B.year='2019' Collate 'Chinese_Taiwan_Stroke_CI_AS'
总结:排序规则错误出现在哪个关联字段上面则在哪个关联字段上面增加 Collate '排序规则'