SQL SERVER 2000/2005中默认不区分大小写,可以通过collate Chinese_PRC_CS_AS来要求区分大小写,可以通过collate Chinese_PRC_CI_AS恢复默认的不区分大小写*/
默认情况下,SQL Server不区分大小写,如果数据表TEST的TNAME列中有数据“abcd”和“Abcd”, 如果使用查询语句:select * from test where tname like 'a%',则查询的结果会把上面的两条记录都查询出来,这一点上和Oracle有区别.
可以通过设置排序规使其区分大小写,可以分别在创建数据库、修改数据库、创建表的字符型列(char\varchar\nchar \nvarchar等)时指定排序规则来实现。如
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 语句时就可以区分大小写了。
--建立测试数据库
create database test
--collate Chinese_PRC_CS_AS用于alter database中,改变不区分大小写的默认设置
alter database test collate Chinese_PRC_CS_AS
--选择测试数据库
use test
--若t表存在则删除
if object_id('t') is not null drop table t
--建测试表
create table t(a int identity(1,1) primary key,b varchar(10))
--插入测试数据
insert into t values('abc')
insert into t values('ABC')
--下面语句将只得到b列为小写abc的结果
select * from t where b='abc'
--collate Chinese_PRC_CI_AS用于alter table中,不要求区分大小写
alter table t alter column b varchar(10) collate Chinese_PRC_CI_AS
--由于上面alter table语句,下面将得到b列为大小写abc的结果
select * from t where b='abc'
----collate Chinese_PRC_CS_AS用于select中,要求区分大小写,下面语句将只得到b列为小写abc的结果
select * from t where b collate Chinese_PRC_Cs_AS ='abc'
--collate Chinese_PRC_CS_AS用于建表中,可对列是否包含英文字母进行检查约束
create table tt
(
a int identity(1,1) primary key,
b varchar(10) collate Chinese_PRC_CS_AS check (upper(b)<>lower(b)),
c varchar(10) collate Chinese_PRC_CS_AS check (upper(c)=lower(c))
)
--测试
insert into tt values('a12','123')--成功
insert into tt values('123','123')--违反约束,b列要有英文字母
insert into tt values('Abc','a123')--违反约束,c列不能有英文字母