课程讲解 如何使用SQL Server校勘功能

ZDNet软件频道 时间:2009-11-17 作者:builder.com | 天新网 我要评论()
本文关键词:Mssql SQL SQL Server 数据库
校勘是指对代码页、字母大小写、音调、语言和字母表的整理,很多校勘都是在数据进入数据库之前进行的,这篇文章将向您介绍一些相关的校勘方法,以及数据库对多种字符集的处理方法。

校勘(collation)是指对代码页、字母大小写、音调、语言和字母表的整理,很多校勘都是在数据进入数据库之前进行的,根据我的经验,北美的大部分数据库管理员都在使用默认的大小写敏感的校勘设定,这对于数据本身没有影响,但是对于数据的比较和索引会造成影响。

这篇文章将向您介绍一些相关的校勘方法,以及数据库对多种字符集的处理方法。

为了说明校勘的使用,我们首先来创建一个数据库,列表A给出了创建数据库的代码。

CREATE SCHEMA CaseCheck

GO


CREATE TABLE CaseCheck.Names
(
NamePK Int Identity(1,1) PRIMARY KEY,
Name Varchar(50) NOT NULL
)
GO


INSERT INTO CaseCheck.Names VALUES ("Fuller")
INSERT INTO CaseCheck.Names VALUES ("FuLLer")
INSERT INTO CaseCheck.Names VALUES ("FULLER")
INSERT INTO CaseCheck.Names VALUES ("fuller")
GO

列表A

列表B是一些查询,对于大小写不敏感的情况,这几个查询将返回相同的四个数据行,但是如果我们的任务是从数据行中选取大小写完全匹配的记录呢?

SELECT * FROM CaseCheck.Names    
SELECT * FROM CaseCheck.Names WHERE Name = "fuller"    
SELECT * FROM CaseCheck.Names  WHERE Name = "FULLER"    
SELECT * FROM CaseCheck.Names WHERE Name = "fuller"    

GO

列表 B

现在我们就要使用校勘的功能了,尽管在数据库创建的时候,数据库管理员已经指定了校勘的选项,但是您可以通过WHERE语句中的COLLATE选项来使用不同的校勘设定,在列表C的查询中,前三个都返回了一条记录,而最后一个查询的返回结果为空。

SELECT * FROM CaseCheck.Names  WHERE Name = "fuller"    
COLLATE Latin1_General_CS_AS
 SELECT * FROM CaseCheck.Names WHERE Name = "FULLER"    
COLLATE Latin1_General_CS_AS    
 SELECT * FROM CaseCheck.Names WHERE Name = "fuller"    
COLLATE Latin1_General_CS_AS
 SELECT * FROM CaseCheck.Names WHERE Name = "FUllER"    
COLLATE Latin1_General_CS_AS
 GO

列表 C

假设您现在想把所有"fuller"形式的拼写改为"Fuller"(包括像"fUlLEr"这种毫无意义的拼写组合),通过列表D中的代码,您可以非常轻松地实现这一功能。

UPDATE CaseCheck.NamesSET Name = UPPER(LEFT(Name,1))
 + LOWER(SUBSTRING(Name,2,LEN(Name)-1))

列表D

从大型主机上导入数据的时候,我都会首先运行以上的代码,这样就不必再担心单词大小写的问题了。

如果您想查看所有的校勘选项及其简要说明,可以运行以下的SQL代码:SELECT * FROM ::fn_helpcollations()。

想要查看数据库当前的校勘设定,可以使用以下代码:

SELECT collation_name 

FROM master.sys.databases 

WHERE Name="SQLTips"

在列表E中,我添加了一些带有特殊字符的数据行,我使用了我的好朋友DejanSunderic的名字,他的名字应该拼写为Šunderic"(字母c实际上应该有重音符号的,由于使用的字体,所以显示成了现在的效果)。

INSERT INTO CaseCheck.Names VALUES 
(NChar(352)+ "underi" + NChar(263))
INSERT INTO CaseCheck.Names VALUES 
("SUNDERIC")
INSERT INTO CaseCheck.Names VALUES
("sUnDeRI" + Nchar(263))
INSERT INTO CaseCheck.Names VALUES
("Sunderi" + Nchar(263))
GO

Mssql

SQL

SQL Server

数据库


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134