推荐序
在关系数据库中,以集合(set)的方式来处理大量记录才有效率,使得 SQL(Structure Query Language)语言无法被C#/Java/Visual Basic 等面向对象语言取代。而善用数据是信息系统成功的关键因素之一,现今大量交易、数据整合、商业智能的结构性需求大增,将使SQL显得更加重要。
随着 Microsoft SQL Server 版本的演进,衍生自 ANSI SQL 的 T-SQL(Transact Structure Query Language)语言变得独立且功能强大,拥有众多用户,是解决各种数据问题的主流语言。在 SQL Server 的功能大量扩增并广泛进入企业各系统后,日益庞大的数据量让 T-SQL 发挥了重要的作用。
虽然讨论 T-SQL 的书很多,但因为 SQL Server 2005 巨幅扩增了功能,且标准化了许多语法,将原来需要通过系统存储过程、DBCC 才能创建、设置或维护的功能,都回归到标准的 T-SQL 语法,并放宽了语法的自由度。例如:引入 .NET 对象作为 SQL Server 服务器端对象、XML 数据类型与 XQuery 语法、Service Broker 消息队列服务、以 DDL 建立系统登录与数据库用户、通过 T-SQL 维护索引、TOP 运算符可以搭配变量或子查询,以及搭配 CTE 使用在 UPDATE、DELETE 语法中、聚合运算搭配 OVER 运算符等,诸多功能在 SQL Server 2000中是无法用T-SQL办到的。因此,以往的 T-SQL 书籍将不足以讲解2005版SQL Server 的功能。
若论微软 SQL Server方面的最重要著作,大概非 Inside Microsoft SQL Server 系列丛书莫属了。从SQL Server 6.5 以来,一直常驻在专业 SQL Server DBA 案头的,就是对应各版本的Inside Microsoft SQL Server系列丛书了。这不是笔者的妄加赞誉,而是素有信息界诺贝尔奖称呼的图灵奖(Turing Award)得主 Jim Gray 在该系列书籍的序言中所说的。笔者本身也以读过该系列的书,代表进入了该版本的世界(例如要熟悉 SQL Server 2000,先读Inside Microsoft SQL Server 2000),以此为深入了解 SQL Server 的标准。
由于大幅改版与新增功能,导致以往出书速度还蛮快的 Inside Microsoft SQL Server 系列,这次让大家从 SQL Server 2005 上市后等了一年。也由于功能繁多,原本已极为厚重的 Inside Microsoft SQL Server 再也无法以单行本面世,而改为四本合集的系列丛书。先前 Inside SQL Server 各版本的作者 Kalen Delaney,在此次 Inside Microsoft SQL Server 2005 的四本书中,改任丛书编辑(Series Editor),并亲自撰写《Inside Microsoft SQL Server 2005 : The Storage Engine》一书。
此刻,我们需要全面地重新认识 T-SQL,够分量的书籍大概非《Inside Microsoft SQL Server 2005 : T-SQL Querying》和本书莫属。两书的作者群里,以资深的讲师与顾问 Itzik Ben-Gan 为首,包含SQL Server 2005 团队的两位产品经理,分别负责SQL Server 查询引擎和 Service Broker 的深入介绍,以及其他拥有多年经验的顾问与教师们合作撰写。因此,两本书中皆有着技术底层的详细解说,搭配各项功能的最佳应用实践。
这两本书主要以集合数据处理(set-based query)和程序逻辑(procedural programming)两个方面来区分。前者重视 SQL DML 语法的逻辑和效率,本书则强化搭配过程控制(如 IF、WHILE、游标等)所建构的服务器端对象,如函数、存储过程、CLR 对象、Service Broker 等。
笔者一直认为技术书籍与联机帮助不同的地方是技术书籍提供应用场景与阅读趣味,将技术与实际应用串起来。因为联机帮助写得像字典,若将信息语言的应用比喻为作文,则一般人很难光靠一本字典学会作文。我们需要看文章来模拟笔触、技法与结构。在学习信息技术时,自然需要实际场景和程序代码范例。而这两本书所提供的 T-SQL 范例大都简短有力,两三行就切中要旨,由范例就可看出作者的功力。对于 T-SQL 的方方面面,作者们都进行了提纲挈领、深入浅出的讲解,不管是凸显语法结构、运算符、适用性,还是建立服务器对象,都让有T-SQL基础的人能迅速抓住重点。
使用T-SQL如同激荡脑力的智力测验,同一个问题让人惊叹的解法层出不穷,需要经验与知识的累积,是技术与艺术的展现。而这两本书读来让人愉悦,有如在读 T-SQL 的秘技,作者整合了不同的技术,并将它们混在一起使用。例如,以一般的 SELECT 语法查询,要将多笔记录的域值组成符号分隔的单一字符串时,会采用类似如下的做法。
DECLARE @c nvarchar(4000)
SET @c=''
SELECT @c=@c + CustomerID +',' FROM Customers
SELECT @c
在上述范例中,会返回 Customers 数据表中以逗号分隔所有客户编号的单一字符串。但作者在本书中,强调此种方法的不确定性,因为微软并没有明文保证此种连接字符串的方法一定可行。但由于 FOR XML 子句在 2005 版本时多了 PATH 选项,因此该组字符串可以换成如下标准的查询方式。
SELECT CustomerID + ',' AS [text()]
FROM Customers FOR XML PATH('')
书中充满了此种结合不同技术的意想不到之解法,让懂得关键之人顿感妙趣横生,不懂奥妙之人,仍可借鉴引用。
本书的目的是为了帮助你熟悉 T-SQL 语言,并通过该语言撰写 SQL Server 服务器端的对象,例如视图、用户自定义函数、存储过程、触发器等,由于未解释 T-SQL 基础语法定义,属于进阶的书籍。其内各章节大都彼此独立,且作者所拟的章节针对性很强,你可以浏览后,选择主题切入。日后在工作上需要应用到该项功能时,再回头精研作者所阐述的要旨。
前4章详细解释了T-SQL一般使用中让人困扰的用法,例如以字符类型描述日期时间时,最好采用 [yy]yymmdd[ hh:mm[:ss][.mmm]] 格式,例如以‘20060423 20:14:42.132’来表示时间最佳。另外还探讨了动态组织与执行 SQL 语法、临时表(Temporary Table)和表变量(Table Variable)的迷思、游标(Cursor)的正确使用方式等,针对以 T-SQL 撰写商业逻辑时常用的技巧,作者详加剖析了较佳的用法。
在其后的章节中,分别解释了为何要在服务器端创建视图、函数、存储过程、触发器、端点、Service Broker 等对象,以及事务管理和错误处理。书中解释了许多关于性能的议题,如第6章特别强调了用户自定义函数的正面价值在于:提供了安全、弹性以及程序的可维护性外,但它可能损伤性能。而第7章说明了存储过程虽然会因为缓存执行计划而提升性能,但若数据分布不平均,造成索引误用,依然损伤性能。因此需要小心搭配整个存储过程的 WITH RECOMPILE 选项,或是 SQL Server 2005 新提供的:单句查询语法搭配 OPTION(RECOMPILE)选项。
读到 Service Broker 的产品经理 Roger Wolter 所撰写的第11章时,才能理解由于时间的压力,为了赶上市而分割 SQL Server 2005 的部分功能。但因功能尚未完成,导致保留的 T-SQL 语法让人莫测高深,这些情况在本章有了解释。例如 Service Broker 在打开对话时,总要以BEGIN DIALOG CONVERSATION 语法开始,笔者就一直怀疑是否自己的英文能力太差,为何看不出Conversation 加 Dialog 这个关键词的用途?原来 Conversation 分为 Dialog 和 Monolog 两种,Dialog 是两边的服务可以互为通信,Monolog 则是发起端单方面的声明。但 Monolog 在这个版本还未做出来,而为了下一个版本的兼容性,本版就需要保留使用 Dialog 关键词。另外,在建立 Service Broker 的对话时,来源端的 Service 名称可以直接指定 Service 对象名称,但目的端却需要用字符串格式,读了此书才知道因为未来目的端可能不局限是 SQL Server 所提供的服务,因此以一般的文字字符串来描述。
本书的译者赵立东老师有6年的开发经验,精通 .NET 和 SQL Server。赵老师翻译本书非常认真,不仅更正了原书提出的勘误,且在翻译过程中,经常与原作者Itzik讨论和并向他请教,同时也不时和笔者交换意见。所以,在他翻译的过程中,我受益不少。译者与博文视点曾合作翻译了《Programming ASP.NET中文版第3版》一书。此外,他也正在和其他译者一起翻译《Inside Microsoft SQL Server 2005:T-SQL Querying》一书,并担任该书的审校工作,这本书是笔者期待的另一本佳作。
胡百敬
2007年5月于台湾
分享到:
相关推荐
本压缩包包含了针对32位和64位系统的两个补丁:SQLServer2005_BC.msi 和 SQLServer2005_BC_x64.msi,主要目的是为了提升SQL Server 2005 Business Intelligence (BI)组件的兼容性和性能。 SQL Server 2005 Business...
【Microsoft SQL Server 2005 向后兼容组件】是微软为了确保应用程序能在更新的SQL Server版本上继续运行而提供的关键组件。这些组件确保了与SQL Server 2005相关的功能和特性在更高版本的数据库服务器中得以支持,...
### SQL Server 2005 启用远程连接详解 #### 一、为SQL Server 2005启用远程连接 在默认情况下,SQL Server 2005 的配置是只允许本地连接,为了实现远程访问,需要进行一系列的设置。 **步骤1:** 打开SQL Server...
SQL Server 2005是微软推出的一款关系型数据库管理系统,它在数据库管理、数据存储、数据处理等方面具有丰富的功能。本话题主要聚焦于SQL Server 2005及其后的版本,尤其是对于DTS(Data Transformation Services)...
Microsoft SQL Server Management Studio Express(SSMSE)是一种免费、易于使用的图形管理工具,用于管理SQL Server 2005 Express Edition和SQL Server 2005 ExpressEdition with Advanced Services。注意:SSMSE ...
SQL Server 2005 SP4(Service Pack 4)是微软针对其关系型数据库管理系统SQL Server 2005发布的一个重要更新。这个服务包包含了大量的修复程序、安全更新和性能优化,旨在提高SQL Server 2005的稳定性和安全性。SP4...
Sql Server 2005 打开 Sql Server 2008 mdf 文件数据库转换是指将 Sql Server 2008 中的数据库文件(mdf 文件)转换为 Sql Server 2005 可以识别的格式,以便在 Sql Server 2005 中使用。这种转换过程需要使用 Sql ...
Microsoft SQL Server 2005 Backward Compatibility Components (Microsoft SQL Server 2005 向后兼容组件) SQL Server Backward Compatibility 包中包含 最新版本的 Data Transformation Services 2000 运行时 ...
"SQLServer2005_SSMSEE.msi" 文件就是SQL Server 2005的System Management Studio Express(SSMSEE)的安装程序,这是一个简化版的SQL Server Management Studio,专为开发者和小型团队设计,提供基础的数据库管理和...
Microsoft SQL Server 2005 Backward Compatibility Components (Microsoft SQL Server 2005 向后兼容组件) SQL Server Backward Compatibility 包中包含最新版本的 Data Transformation Services 2000 运行时 (DTS...
SQL Server 2005是微软公司推出的一款关系型数据库管理系统,主要应用于企业级的数据存储、管理和分析。作为X64版本,它专为64位操作系统设计,能够充分利用64位系统的硬件性能,提供更高效的数据处理能力。在本...
标题中的"SQLServer2005_SSMSEE_x64.rar"表明这是一个关于Microsoft SQL Server 2005的管理工具,特别指出是64位版本,并且是压缩包文件。描述中的“2005 管理工具”进一步确认了这个文件是用于管理和维护SQL Server...
SQL Server 2005 Express Edition 是微软推出的一款轻量级数据库管理系统,特别适用于小型企业和个人开发者。在64位(X64)系统上安装SQL Server 2005 Express,可以充分利用更大的内存和处理器资源,从而提高数据...
SQL Server 2005 SP3(Service Pack 3)是微软数据库管理系统SQL Server 2005的一个重要更新版本,旨在提升系统性能、稳定性和安全性。SP3包含了自SQL Server 2005 RTM(Release to Manufacturing)发布以来的所有...
"sql2005ruanjian.txt"可能是关于SQL Server 2005软件或SP4补丁的附加信息或注意事项。 在安装SP4之前,确保备份所有重要的数据库,并遵循官方提供的安装步骤,以免数据丢失或系统出现不兼容情况。同时,检查你的...
"SQL2005精简版一键安装"是指通过一个简化的过程来快速安装SQL Server 2005 Express Edition,大大降低了安装的复杂性。 通常,SQL Server的安装过程包括多个步骤,如接受许可协议、选择安装类型、配置服务器实例、...
SQL Server 2005是微软公司推出的一款关系型数据库管理系统,它在IT领域中扮演着重要的角色,尤其是在数据存储、管理和分析方面。在某些情况下,用户可能需要卸载SQL Server 2005,例如升级到更高版本,或者由于系统...
**SQLServer2005 JDBC驱动程序JAR包详解** SQLServer2005 JDBC驱动程序是用于在Java应用程序中连接到Microsoft SQL Server 2005数据库的关键组件。JDBC(Java Database Connectivity)是一种Java API,允许Java...
SQL Server 2005是微软公司推出的一款关系型数据库管理系统,它在企业级数据管理、分析和报告方面具有广泛的应用。SQL Server 2005的发布为开发者提供了更强大的工具和更丰富的功能,使其在数据库管理和开发领域中...