日期:2014-05-17  浏览次数:21135 次

"Chinese_PRC_BIN" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突。如何解决

CREATE TABLE #re
(TD001 varchar(50) NULL,--订单单别
TD002 varchar(50) NULL,--订单单号
TD003 varchar(50) NULL,--订单序号
TD004 varchar(50) NULL, --编码
TD008 float NULL,--数量
MB025 varchar(50) NULL, --属性
UDF02 varchar(50) NULL, --印字
MC005 varchar(50) NULL, --工单单别
LAYER int NULL,--层次
TD014 varchar(250) NULL,-- 客户型号
)
SELECT a.TD001,a.TD002,a.TD003,d.MD003,a.TD008*MD006/MD007*(1+MD008) AS TD008,
e.MB025,a.UDF02,c.MC005,2,a.TD014
from #re a left join BOMMC c on a.TD004 = c.MC001 left join BOMMD d on c.MC001=d.MD001
left join INVMB e on d.MD003=e.MB001 collate Chinese_PRC_CI_AI_WS 
where a.MB025 <> 'P'


以上代码老是报(消息 468,级别 16,状态 9,第 16 行
无法解决 equal to 运算中 "Chinese_PRC_BIN" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突。)错误, 我已经加了collate Chinese_PRC_CI_AI_WS ,但是没有效果,请高人指点,谢谢.

------解决方案--------------------
SQL code


1.将数据库的字符集修改为:
alter database dbname collate Chinese_PRC_CI_AS

2.

--1. 为数据库指定排序规则
CREATE DATABASE db COLLATE Chinese_PRC_CI_AS
GO

ALTER DATABASE db COLLATE Chinese_PRC_BIN
GO


更改一下排序规则看看

------解决方案--------------------
--修改一下字符集规则就可以了,统一字符集规则
alter database dbname collate chinese_PRC_CI_AS
------解决方案--------------------
你这是那个字段给那个字段冲突啊

如果是跟临时表的话,在临时表字段后面指定排序规则
SQL code

CREATE TABLE #re    
(TD001 varchar(50) NULL collate Chinese_PRC_CI_AI_WS--订单单别
)

------解决方案--------------------
探讨

我用 alter database kangda collate Chinese_PRC_CI_AS
结果如下

消息 5030,级别 16,状态 2,第 1 行
无法用排他锁锁定该数据库,以执行该操作。
消息 5072,级别 16,状态 1,第 1 行
ALTER DATABASE 失败。无法将数据库 'kangda' 的默认排序规则设置为 Chinese_PRC_CI_AS。
……

------解决方案--------------------
如果你的数据库在安装时设置(or默认)了某种排序规则,而你的db/table/store procedure等又是从别的地方直接迁移过来/备份还原过来的话,两种排序规则如果冲突,建议你直接重装数据库。。。
SQL2005以上,对已建好的table等修改排序规则很排斥的,
相信我,我碰到过。

如果只是个别的问题,可以直接删掉那个表,重建,或者在join时指定排序规则
------解决方案--------------------
在条件后面 强制指定 排序就行了
------解决方案--------------------

如果是数据库排序不一致,可改为相同
如果是列的排序不一致,可改为相同

操作可直接在企业管理器里改