上世纪90年代后期Microsoft SQL Server 7.0发布后不久,我向微软IT部门的一位资深开发人员询问她和她的团队使用SQL Server时所用的编程语言。“过去我们用C和Visual Basic写代码,但是现在我们只使用T-SQL进行开发。”这让我非常吃惊。那时我已经从事开发新版SQL Server的工作大概已经3年了,后来我才意识到一些非常大的项目也在使用T-SQL开发。此后,微软加大了对新版SQL Server 的投入,包括对T-SQL语言的重要改进。世界上的SQL Server 实例数量成倍增长,今天很多的开发人员、数据库管理员、数据分析师、测试人以及架构师都选择T-SQL作为开发语言,在很多时候,这也是他们唯一使用的编程工具。
仔细观查T-SQL结构你会发现有两种类型的语句,其中一类是选择、插入和更新数据库中的数据的语句,另一类是提供流控制、输出、变量声明和处理以及我们在大部分非数据库编程语言可以找到的其他功能。SELECT、INSERT、SEND和RECEIVE属于第一类,DECLARE、 BEGIN、 IF、ELSE、 WAITFOR和PRINT属于第二类。Itzik根据两类语句之间的大概界线把T-SQL分到两本书——Inside Microsoft SQL Server 2005: T-SQL Quexying和Inside Microsoft SQL Server 2005: T-SQL Programming。
这两本书都不是一个完整的语言参考,也没有必要写这样一本书,因为你可以从微软网站http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx下载语言参考。相反,Itzik利用他丰富的T-SQL教学经验把非常复杂的主题包括在他的书中,还包含SQL Server 2005中新增的功能。让教师写书的另一个优势是他已经向他的学生讲解过无数个与这些主题相关的问题。Itzik非常巧妙地利用这些经验呈现这些素材,就好像回答问题一样,同时书中还包含大量的示例和技巧。我最喜欢的技巧在第一章。它解释了如何使用一个小测试表确定对一个大表执行的ALTER TABLE语句会花费几秒还是几小时。这个重要的技巧会是一个真正的救生员(或是事业提高者)。但要注意,不要忘记使用一个非空的测试表!
本书中我最喜欢的示例是第4章动态SQL中的动态Pivot。SQL Server 2005引入了PIVOT 和UNPIVOT语句,但它们无法处理未知元素数量的旋转。这个限制倍受用户批评。Itzik向你展示了如何在SQL Server 2005 中利用一个由3个语句组成的批处理(如果不算变量声明)实现动态pivoting。如果你使用的不是SQL Server的最新版本,你会在本书中找到SQL Server 2005之前版本的动态pivot的批处理方法。它使用了10条语句,通过比较这两个版本的动态pivot,你会发现SQL Server 2005的强大的编程能力。本书包括SQL Server 2005之前版本的代码段和命令方法,这使得本书对那些还没使用SQL Server 2005中开发人员来说也非常具有吸引力,他们可以直接使用2005之前版本的解决方案。
T-SQL编程这本书包含了大量实用的代码示例,你可以很轻易地把它们应用到自己的工作中。本书的作者除了关注示例的正确性之外,还考虑到安全、性能及潜在的阻塞等因素。因此,本书所包含的大量示例的查询计划都经过检查并与其他计划作过比较。例如,在第9章中,你会发现关于如何使用动态管理视图(DMV)以检测阻塞的场景。DMV是SQL Server 2005中新引入的,它提供了关于服务器状态的信息,这些信息可以用于监视服务器实例的状态、诊断问题、调整性能。
SQL Server是一个复杂的产品,几乎任何问题都不止有一种解决方法。Itzik及合著者彻底地检查每个问题的多种选择并解释应该如何从中做出选择。有时一种方法通常更好些,但经常有利也有弊,这时作者会给出做出正确选择的标准。例如,在第1章你将学习在T-SQL中表示2006年2月12日时,为什么应该使用'20060212'而不是'02/12/06' 或 '12/02/06'。在第2章比较表变量和临时表。在第3章你将学习到如何使用游标,以及更为重要是,什么时候不应该使用游标。第4章描述了EXEC和sp_executesql之间的区别。在接下来的第5章中,你将学习什么时候应用使用公用表表达式(CTE),它是SQL Server 2005中新增的,可以代替创建视图。第7章介绍存储过程,解释了为什么对象名称应该限定架构。第8章阐明了出于性能考虑,什么时候应该把触发器中的inserted或deleted表的内容转移到临时表。在第11章你将学习什么时候使用Service Broker,以及什么时候使用MSMQ或BizTalk更好。这份清单远非详尽,只是让你品味一下本书的内容。
Lubor Kollar
Group Program Manager
Microsoft SQL Server






