解決:無法解析 equal to 作業中 "Chinese_Taiwan_Stroke_CI_AS" 與 "Chinese_PRC_CI_AS" 之間的定序衝突

本文解决了一个关于跨数据库查询时出现的定序冲突问题,通过指定字符串比较方式来避免繁体和简体数据库间的不兼容。

最近在使用连接服务器跨数据库查询数据的时候出现一下问题:

無法解析 equal to 作業中 "Chinese_Taiwan_Stroke_CI_AS" 與 "Chinese_PRC_CI_AS" 之間的定序衝突


很明显是繁体数据库和简体数据库之间的冲突。

例如:

select top 50 workno,CName,sex, simname,convert(varchar(10),effectday,120) 
effectday from [10.129.97.218].[hrms_db_20120319].dbo.vw_employee  WHERE  
lastdimidate is  null and workno like '%' and simname like '%%'  and workno 
not like 'T%' and workno  not in (select EmployeeCode from hr_EmployeeOnDuty 
where EmployeeOrderID ='ZM2012030028') order by workno desc


 [10.129.97.218].[hrms_db_20120319].dbo.vw_employee 为简体SQL2005

hr_EmployeeOnDuty  为繁体SQL2005


解决方法:

select top 50 workno,CName,sex, simname,convert(varchar(10),effectday,120) 
effectday from [10.129.97.218].[hrms_db_20120319].dbo.vw_employee  WHERE  
lastdimidate is  null and workno like '%' and simname like '%%'  and workno 
not like 'T%' and workno  COLLATE Chinese_Taiwan_Stroke_CI_AS not in (select EmployeeCode from hr_EmployeeOnDuty 
where EmployeeOrderID ='ZM2012030028') order by workno desc


加上红色关键字即可以解决。



解决 equal to 运算中 `Chinese_PRC_BIN` 和 `Chinese_PRC_CI_AS` 排规则冲突,可采用以下方法: - **指字符型字段排规则**:在 SQL 里,能够运用 `COLLATE` 子句来指字符型字段的排规则。像在进行表连接操作时,为字段指相同的排规则,以避免冲突。示例如下: ```sql SELECT top(10) * FROM [attendance].[dbo].[att_AttendanceDetail] a left join [attendance].[dbo].[base_StaffInfo] b on a.staffID collate Chinese_PRC_CI_AS = b.user_no where uploadtime >= '2018-02-10 00:00:00' and staffID <> '0' and left(b.dept_no, 4) in (select dept_no from [attendance].[dbo].[Coll_deptInfo]); ``` 此示例在连接条件里为 `a.staffID` 指了 `Chinese_PRC_CI_AS` 排规则,从而和 `b.user_no` 的排规则保持一致,避免了冲突[^4]。 - **修改表列的排规则**:可以使用 `ALTER TABLE` 语句来修改表中列的排规则,让其其他参比较的字段排规则相同。示例如下: ```sql ALTER TABLE [attendance].[dbo].[att_AttendanceDetail] ALTER COLUMN staffID [nvarchar] (32) COLLATE Chinese_PRC_CI_AS; ``` 该示例把 `[attendance].[dbo].[att_AttendanceDetail]` 表中的 `staffID` 列的排规则修改成了 `Chinese_PRC_CI_AS` [^2]。 - **在查询中统一排规则**:在查询语句里统一指规则,使参比较的字段使用相同的排规则。示例如下: ```sql SELECT * FROM table1 JOIN table2 ON table1.column1 COLLATE Chinese_PRC_CI_AS = table2.column2 COLLATE Chinese_PRC_CI_AS; ``` 此示例在连接条件中为 `table1.column1` 和 `table2.column2` 都指了 `Chinese_PRC_CI_AS` 排规则,确保比较时排规则一致 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值