操作中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_CI_AI" 之间的排序规则冲突 的解决办法

最主要就一句话,在条件中不同排序规则的列后面加上"  collate Chinese_PRC_CI_AS"即可解决。

 

 

 

有个需求:要求数据库系统自动同步两个不同数据库中的人员信息。

首先想到写一个存储过程然后由系统任务来自动处理。

尝试性的写了下面的查询语句:

select WINDOWSID,NAME,EMAIL,DEPT,CONT from DB1.dbo.USER

 where WINDOWSID in (select WINDOWSID from DB2.dbo.USER)

发现SQL server2005报如下错误:

Msg 468, Level 16, State 9, Line 1

无法解决 equal to 操作中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_CI_AI" 之间的排序规则冲突。



 

在网上查了半天资料,如果你看这片文章之前也查了些资料,应该和我看到的差不多,结果就是弄清楚了什么是“Chinese_PRC_CI_AS”和“Chinese_PRC_CI_AI”你还会得到如下语句:

alter database DB1 collate Chinese_PRC_CI_AS;

alter database DB2 collate Chinese_PRC_CI_AS;

但是执行这两条语句后,再作查询,错误依旧。

然后根据之前网上的信息,修改查询语句为:

select WINDOWSID,NAME,EMAIL,DEPT,CONT from DB1.dbo.USER

 where WINDOWSID in (select WINDOWSID collate Chinese_PRC_CI_AS from DB2.dbo.USER)

发现查询可以得到结果。

下面对上面的问题做个总结:

第一步,基础知识。查看SQLserver2005的帮助,你会得到如下信息:

CollationDesignator

Specifies the base collation rules used by the Windows collation. The base collation rules cover the following:

•       The alphabet or language whose sorting rules are applied when dictionary sorting is specified

•       The code page used to store non-Unicode character data.

Some examples are:

•       Latin1_General or French: both use code page 1252.

•       Turkish: uses code page 1254.

For a list of collation designators, see Collation Settings in Setup.

CaseSensitivity

CI specifies case-insensitive, CS specifies case-sensitive.

AccentSensitivity

AI specifies accent-insensitive, AS specifies accent-sensitive.

KanatypeSensitive

Omitted specifies kanatype-insensitive, KS specifies kanatype-sensitive.

WidthSensitivity

Omitted specifies width-insensitive, WS specifies width-sensitive.

BIN

Specifies the backward-compatible binary sort order is to be used.

BIN2

Specifies the binary sort order that uses code-point comparison semantics introduced in SQL Server 2005.

我们可以详细认识到Chinese_PRC_CI_AS的含义。

第二步,修改数据库的collate。前文已提到的SQL语句可以用来修改数据库的collate  ,当然你也可以通过SQL2005界面更便捷的修改。

 

还有就是修改系统的全局collate

 

第三步:通过以上步骤可以说准备工作已经全部完成了。

既然数据库的collate都是Chinese_PRC_CI_AS为什么查询的时候还会报错?只有如下语句才能执行?

select WINDOWSID,NAME,EMAIL,DEPT,CONT from DB1.dbo.USER

 where WINDOWSID in (select WINDOWSID collate Chinese_PRC_CI_AS from DB2.dbo.USER)

只能有一种原因:嵌套查询语句的collate默认和设置的不一致,查看全局collate也是Chinese_PRC_CI_AS,那到底为什么还会报错呢?



 

因为在windows系统中大小写是不敏感的,难道是这个原因?

经过一番折腾对collate有了一定的了解,也算些收获吧!

写的不好,见谅!

 

转自:http://zjsoft.iteye.com/blog/516051

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值