sql 2008 排序

来源:互联网 发布:奥德利条幅机文泰软件 编辑:程序博客网 时间:2024/06/05 18:56

数据库创建是不去分大小写的,但是今天查询时发现区分大写,经查时字段排训不是没人的的Chinese_PRC_CI_AS.
select * FROM baser_thr.[ETL_DB].[dbo].[ftpConf]
where Fact_No='Wistron_chenge'--0条
--Fact_No='Wistron_ChengDe'--3条

--Fact_No COLLATE Chinese_PRC_CI_AS ='Wistron_chengde'--3条

Fact_No字段排序规则:Chinese_PRC_CS_AS 区分大小写,区分重音
[ftpConf]表排序规则:Chinese_PRC_CI_AS
[ETL_DB].数据库排序规则: Chinese_PRC_CI_AS
baser_thr服务器排序规则:Chinese_PRC_CI_AS

数据库字段内容是'Wistron_ChengDe'所以只有查询条件是'Wistron_ChengDe'或者强制不区分大小写查询才能查到结果

SQL SERVER 2000/2005/2008中默认不区分大小写,可以通过collateChinese_PRC_CS_AS来要求区分大小写,可以通过collateChinese_PRC_CI_AS恢复默认的不区分大小写*/
可以通过设置排序规使其区分大小写,可以分别在创建数据库、修改数据库、创建表的字符型列(char\varchar\nchar\nvarchar等)时指定排序规则来实现。
可以对数据库更改默认的排序规则,alter database 数据库 collate 排序规格
但是却没有办犯没有办法对已有表表进行排序规则的更改,可以对列进行排序规则的更改。
如:
create database test COLLATE Chinese_PRC_CS_AS--这样创建的数据库中区分大小写
alter database test COLLATE Chinese_PRC_CS_AS --修改后的数据库中区分大小写
Create table test(tid int primary key,tname varchar(20) collatechines_prc_cs_as) --这样创建的tname列在使用SELECT 语句时就可以区分大小写了。

对不同排序规则的字段进行匹配时,会发生
消息 468,级别 16,状态 9,第 1 行
无法解决 equal to 操作中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_CS_AS"之间的排序规则冲突。
在查找的时候,进行规则的更改(不改表的结构属性),既可以实现匹配:

SELECT * FROM SJCCBZ, Order_Motor WHERE
SJCCBZ.OrderID COLLATE Chinese_PRC_CI_AS =Order_Motor.OrderIDCOLLATE Chinese_PRC_CI_AS and SJCCBZ.OrderID='1'ANDOrder_Motor.M_State='已报账'

参考文献:http://yulimeander.blog.sohu.com/138331525.html

http://hi.baidu.com/331360958/blog/item/9d231a8f4bd951fd513d923a.html

0 0