在区分大小写的SQL Server中使用DISTINCT问题
2008-10-24 10:09:36 来源:WEB开发网问题
SQL Server为你提供了在你的数据库中存储混合大小写数据的能力,但是根据你怎样创建数据库,SQL Server将在你给出T-SQL命令时忽视大小写。你可能面对的一个问题是你想从一个表获得只包含不同值的列表,来显示你的表中不同,但是如果你的数据库是按照不区分大小写来建立的,那么DISTINCT条件语句不会显示这些不同,它只会将所有的值放在一起。所以在这方面有什么选择吗?
专家解答
为了说明这个动作,我们将使用一个区分大小写和一个不区分大小写的数据库来看看它工作的两种方式。
第一组查询使用了AdventureWorks数据库,它被配置为区分大小写。为了得到从你的数据库而来的集合,你可以运行这个查询:
SELECTname,collation_name
FROMmaster.sys.databases
我们将查询AdventureWorks数据库中的Preson.Contact的数据。所有的数据都是作为混合大小写来建立的,所以当我们运行这个查询的时候我们没有得到重复的值。
SELECTDISTINCTTOP10FirstName
FROMPerson.Contact
WHEREFirstNameLIKE'A%'
ORDERBY1
如果你更新一条记录并将FirstName从“Adam”改为“ADAM”,那么当运行这个查询时我们会获得两个不同的值。
UPDATEPerson.Contact
SETFirstName='ADAM'
WHEREContactID=62
GO
SELECTDISTINCTTOP10FirstName
FROMPerson.Contact
WHEREFirstNameLIKE'A%'
ORDERBY1
正如你看到的,现在“Adam”和“ADAM”作为不同的值来显示。
下一步我们将要做的是在一个不区分大小写的数据库中创建一个新表然后从Person.Contact加载所有的数据到这个新表中。
CREATETABLETest.dbo.contact(FirstNamenvarchar(50))
GO
INSERTINTOTest.dbo.contact
SELECTFirstNameFROMPerson.Contact
GO
SELECTDISTINCTTOP10FirstName
FROMTest.dbo.contact
WHEREFirstNameLIKE'A%'
ORDERBY1
GO
当我们运行SELECT查询时你可以看到输出将“Adam”和“ADAM”结合起来,因为不区分大小写。
为了解决这个问题我们可以将这个查询按照下面的方式修改使得这个收集在FirstName字段上区分大小写。
SELECTDISTINCTTOP10FirstNameCOLLATEsql_latin1_general_cp1_cs_as
FROMTest.dbo.contact
WHEREFirstNameLIKE'A%'
ORDERBY1
当这个运行时,我们看到了值“Adam”和“ADAM”。
所以根据你的数据库是怎样建立的,你将能够或不能看到这个不同。
为了给你显示另一个例子,下面是一个快速选择区分大小写或不区分大小写选项的方法。
我们运行的第一个查询是使用区分大小写,所以四条记录都将显示出来。
selectdistinct(item)COLLATEsql_latin1_general_cp1_cs_as
FROM(
select'abcd'item
unionallselect'ABCD'
unionallselect'defg'
unionallselect'deFg')items
第二个查询中不同的是收集的名称。当这个查询使用不区分大小写时,我们只获得两条记录。
selectdistinct(item)COLLATEsql_latin1_general_cp1_ci_ai
FROM(
select'abcd'item
unionallselect'ABCD'
unionallselect'defg'
unionallselect'deFg')items
- ››SQL Server 2008 R2 下如何清理数据库日志文件
- ››sqlite 存取中文的解决方法
- ››SQL2005、2008、2000 清空删除日志
- ››SQL Server 2005和SQL Server 2000数据的相互导入...
- ››sql server 2008 在安装了活动目录以后无法启动服...
- ››sqlserver 每30分自动生成一次
- ››sqlite 数据库 对 BOOL型 数据的插入处理正确用法...
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
更多精彩
赞助商链接