《SQLServer中使用DISTINCT的大小写问题》由会员分享,可在线阅读,更多相关《SQLServer中使用DISTINCT的大小写问题(4页珍藏版)》请在金锄头文库上搜索。
1、 SQLServer中使用DISTINCT的大小写问题为了说明这个动作,我们将使用一个区分大小写和一个不区分大小写的数据库来看看它工作的两种方式。第一组查询使用了AdventureWorks数据库,它被配置为区分大小写。为了得到从你的数据库而来的集合,你可以运行这个查询:SELECT name, collation_nameFROM master.sys.databases我们将查询AdventureWorks数据库中的Preson.Contact的数据。全部的数据都是作为混合大小写来建立的,所以当我们运行这个查询的时候我们没有得到重复的值。SELECT DISTINCT 10 FirstNa
2、meFROM Person.ContactWHERE FirstName LIKE ”A%”ORDER BY 1假如你更新一条记录并将FirstName从“Adam”改为“ADAM”,那么当运行这个查询时我们会获得两个不同的值。UPDATE Person.ContactSET FirstName = ”ADAM”WHERE ContactID = 62GOSELECT DISTINCT 10 FirstNameFROM Person.ContactWHERE FirstName LIKE ”A%”ORDER BY 1正如你看到的,现在“Adam”和“ADAM”作为不同的值来显示。下一步我们将要
3、做的是在一个不区分大小写的数据库中创立一个新表然后从Person.Contact加载全部的数据到这个新表中。CREATE TABLE Test.dbo.contact (FirstName nvarchar(50)GOINSERT INTO Test.dbo.contactSELECT FirstName FROM Person.ContactGOSELECT DISTINCT 10 FirstNameFROM Test.dbo.contactWHERE FirstName LIKE ”A%”ORDER BY 1GO当我们运行SELECT查询时你可以看到输出将“Adam”和“ADAM”结合起来
4、,由于不区分大小写。为了解决这个问题我们可以将这个查询根据下面的方式修改使得这个收集在FirstName字段上区分大小写。SELECT DISTINCT 10 FirstName COLLATE sql_latin1_general_cp1_cs_asFROM Test.dbo.contactWHERE FirstName LIKE ”A%”ORDER BY 1当这个运行时,我们看到了值“Adam”和“ADAM”。所以依据你的数据库是怎样建立的,你将能够或不能看到这个不同。为了给你显示另一个例子,下面是一个快速选择区分大小写或不区分大小写选项的方法。我们运行的第一个查询是使用区分大小写,所以四
5、条记录都将显示出来。select distinct (item) COLLATE sql_latin1_general_cp1_cs_asFROM (select ”abcd” itemunion all select ”ABCD”union all select ”defg”union all select ”deFg”) items其次个查询中不同的是收集的名称。当这个查询使用不区分大小写时,我们只获得两条记录。select distinct (item) COLLATE sql_latin1_general_cp1_ci_aiFROM (select ”abcd” itemunion all select ”ABCD”union all select ”defg”union all select ”deFg”) items