您的位置:首页 > 数据库

sql 2008 排序

2016-02-24 11:16 295 查看
数据库创建是不去分大小写的,但是今天查询时发现区分大写,经查时字段排训不是没人的的
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中默认不区分大小写,可以通过collate
Chinese_PRC_CS_AS来要求区分大小写,可以通过collate
Chinese_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) collate
chines_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.OrderID
COLLATE Chinese_PRC_CI_AS and SJCCBZ.OrderID='1'AND
Order_Motor.M_State='已报账'

参考文献:http://yulimeander.blog.sohu.com/138331525.html
http://hi.baidu.com/331360958/blog/item/9d231a8f4bd951fd513d923a.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: