不管你是数据库管理员还是访问数据库的程序员,无论在什么平台上,使用何种工具和程序语言,结构化查询语言(Structure Query Language,SQL)都是必须掌握的。T-SQL 起源于Sybase,是ANSI SQL 的扩展。微软将其迁移到SQL Server平台以后,它变得日益强大和复杂。它是与SQL Server沟通的基础,数据访问、性能、安全、稳定性、备份等都莫不与它有关。熟悉T-SQL是精通SQL Server 的第一步,但是整个语言太过庞大复杂,我们仅能选取最基础、最常用的部分进行介绍。希望既能引领读者入门,又能解决日常问题。.
T-SQL 依其功能可以大致分为三部分:
■数据操纵语言(DML,Data Manipulation Language):其主要语法有Select、Insert、Delete和Update,据此可以查询、添加、修改和更新数据。
■数据定义语言(DDL,Data Definition Language):其主要语法有Create、Alter和Drop,据此可以新建、修改和删除SQL Server服务器端的对象。
■数据控制语言(DCL,Data Control Language):其主要语法有Grant、Deny和Revoke,据此可以允许、拒绝和删除账号的角色权限。
本书主要以此为主线,并辅之以该语言如何结合SQL Server所提供的功能等方面的介绍。
“第1章:SQL程序语言概论”,主要说明关系数据库的特征,简明扼要地解释了诸如表、关系、范式等关系数据库的基本理论;结构化查询语言(Structure Query Language SQL,即T-SQL语言的简称);SQL Server 2005中的对象命名原则以及列举该版本较为著名的新增功能。工欲善其事,必先利其器。
“第2章:使用开发工具查询数据”,本章介绍了可用来执行T-SQL语言的工具程序。其中最主要的是SQL Server Management Studio(SSMS)。SQL Server各项服务的管理,诸如:关系数据库引擎、Analysis Services、Reporting Services等皆由它统一管理。同时可通过SSMS执行各种专用数据语言,如T-SQL、MDX、DMX、XML/A等。但本章的重点在说明SSMS对T-SQL所提供的支持,如“查询编辑器”的使用,以项目或方案管理T-SQL 文件等。最后,对另一个命令行实用工具程序SQLCMD稍加说明,让你除了可以通过SSMS互动地开发、执行和测试T-SQL外,还有另外一个批处理执行T-SQL的选择。如果你已经熟悉关系数据库的概念,且掌握了SQL Server 2005的工具特征,前两章可以快速翻阅。接下来的第3~5章介绍了T-SQL的DML语法,这是本书的重点。
从“第3章:SELECT语句”开始,本书进入T-SQL主题,深入讨论被广泛使用的SELECT语句,它应该是绝大多数朋友日常开发中会用到的语法。本章大篇幅地探讨了如何选择列与行、过滤(WHERE)、分组(GROUP BY)、前N条记录(TOP)、排序(ORDER BY)、排名(RANK)、连接(JOIN/UNION),以及CTE和APPLY等。这是对T-SQL语法的总体介绍,至关重要。?
继有效查询数据之后,“第4章:INSERT 、DELETE 、UPDATE 语句”详细介绍了维护数据的其他操作,除了基本的添加、删除和修改行外,本章还解释了批处理数据操作、大型数据(LOB)的更新,以及在维护数据时搭配Output、Top和CTE等语法。
对DML语法的基础进行介绍后,“第5章:DML应用”着重介绍经常搭配使用的辅助语法,如批注、运算符等。其中最重要的是流程控制语法,如If Else、Begin End、While、Case、结构化错误处理等。有了第3~5 章的基础后,你可以开始利用DDL语法撰写SQL Server服务器端对象,如视图(view)、用户自定义函数(user defined function)、存储过程(stored procedure)和触发器(trigger)等。本书第6~11章以DDL语法为主要介绍对象,辅之以各种服务器端对象的功能并加以解析。..
“第6章:数据表维护”以描述构成表的数据类型开始,解释各种类型间的转换,其后讨论表的创建、修改和删除,并以SQL Server 2005新增的分区表(partition table)功能为结尾。当设计数据库时,不应该让用户或应用程序直接访问表,最好通过一层数据对象来访问表,如视图、存储过程、用户自定义函数等,以提升数据库管理与使用上的安全和弹性,如果设计得当,还可以提升整体的效率。第7、8、10 三章分别介绍了这三种对象的创建语法与用途。
“第7章:视图”提供用户聚焦、简化和查看数据的角度。本章描述如何建立视图,并通过视图维护数据,以及探讨分区视图(partition view),或为视图建立索引(Indexed view)以提升查询性能的方式。最后列举数例,解释SQL Server 2005新增的系统动态管理视图和函数的用途。
如果想很好地利用SQL Server的运算能力,提高信息系统整体设计上的弹性,最重要的是数据库服务器端存储过程的设计,第8章将介绍这一对象。本章从解释SQL Server提供的存储过程类型,如系统存储过程、扩展存储过程等开始,然后描述如何通过DDL撰写存储过程、通过参数定义增加应用程序的弹性、Visual Studio 2005 单步调试,并使用@@error或try catch语法撰写程序内的错误处理。
要维护数据的完整性,一般会采用第6章所介绍的条件约束(constraint)。但是,如果验证数据的逻辑较复杂,或是希望自动化同步其他表甚至远方服务器的数据,则有可能使用第9章介绍的触发器。本章说明SQL Server 2005 所提供的三种触发器,首先是针对DML语法可使用的两种触发器:
■传统的在表添加、修改和删除记录后,所自动触发的“After触发器”。
■SQL Server 2000后续版本支持在实际修改表或视图之前,取代原语法执行的“Instead Of 触发器”,也称为“Before 触发器”。另外,在SQL Server 2005中新增了“DDL 触发器”,让数据库管理员可在数据库和服务器两个级别管理与监控用户所执行的DDL语法。
“第10章:自定义函数”,本章能为用户在设计与撰写结构化的T-SQL功能时提供很大的帮助。本章解释了SQL Server所支持的三种自定义函数,并表列对各种函数的T-SQL语法进行了比较。
■数值函数
■多重语句表函数
.■内嵌表函数
解释完主要的服务器端对象后,在“第11章:以数据定义语言建立其他对象”中继续讲解了几个可能用到的服务器端对象,诸如通过.NET Framework 2.0撰写程序集(assembly),放置到SQL Server内成为存储过程或自定义函数,由于如何通过.NET CLR开发SQL Server 2005版本后的服务器端对象并不是本书的重点,所以本章仅描述通过T-SQL安装与调用.NET程序集的方式。本书在其后的小节一并讨论了同义词、事件通知等SQL Server 2005 新增的功能。
介绍完DDL后,“第12章:授权与数据控制语言”首先解释SQL Server 2005的角色访问安全架构,让你对授权架构有基本的认识,然后讨论数据控制语言Grant、Deny和Revoke语法的使用方式,并与SQL Server Management Studio的图形化界面进行一个简单的比较。
利用前几章的内容讲解完主要的DML、DDL与DCL之后,我们选择了数个与T-SQL相关的重要功能。“第13章:XML ”解释了SQL Server 2005新增的且重要的数据类型XML及其对应的XQuery语法。本章从探讨是否要将XML类型数据放入数据库中开始,随后介绍在SELECT 表字段时,如何通过FOR XML子句换成XML 格式返回前端,以及当前端应用程序输入XML 格式的数据时,如何通过OpenXML函数取出所需的节点值,放入到表对应的字段中。最后讨论为XML数据建立索引,并详细介绍XQuery的使用方式。
在执行T-SQL 的各项功能时,几乎都可以搭配第14章所介绍的“事务”,以提供完整一致的数据访问。本章着重对事务功能进行说明,如ACID(Atomic、Consistence、Isolation、Durable)事务隔离级别、锁定的种类与范围等。在多人访问时,能否善用事务不仅关乎数据的正确性,而且还会严重影响性能。
“第15 章:全文检索”则是针对大型文本数据查找时常用的技术(Office系列工具所产生的二进制数据也可以检索)。本章首先介绍SQL Server 2005重新设计的全文检索服务架构,随后讨论如何设定数据检索,并通过SELECT语法搭配Contains、Containstable、Freetext和Freetexttable等函数进行查询。最后讨论全文检索目录如何集成数据库备份/还原、卸离/附加等机制,以提供整体数据库的备份能力。
本书结尾提供了两个附录,“附录A:DBCC简介”介绍管理与维护SQL Server 时常用的工具命令DBCC(DataBase Console Command)。本附录从介绍较常使用的命令开始,接着通过DBCC特有的功能,Page和Log,展现SQL Server 实体存放数据的结构,最后以监控SQL Server执行状况的跟踪标记结尾。
最后,本书还有另外一个重点是SQL Server 所提供的游标(cursor)架构。“附录B:游标”除了详细地介绍了T-SQL 与其支持的游标语法外,还深入探讨了其合理的用法,最后还将一般T-SQL语法以集合(set)的方式处理数据与游标单条处理数据的特征进行了对比,并指出了误用后可能导致的性能问题。...