摆摊小伙:一铺养三代三年前┅万多买的店铺,到现在是亏是赚
摘要:该白皮书介绍了 Microsoft SQL Server 2005 Beta 2 中的 Transact-SQL 的几個新的增强功能这些新功能可以改善您的表达能力、查询性能以及错误管理功能。本文重点介绍几个概念新颖且互相联系的增强功能並且通过实际示例演示这些功能。本文并未讨论所有新增的 Transact-SQL 功能
该白皮书介绍了 Microsoft SQL Server 2005 Beta 2 中的 Transact-SQL 的几个新的增强功能。这些新功能可以改善您的表達能力、查询性能以及错误管理功能本文重点介绍几个概念新颖且互相联系的增强功能,并且通过实际示例演示这些功能本文并未讨論所有新增的 Transact-SQL 功能。
改善查询的表达能力和 DRI 支持
本节介绍下列新增的关系功能和增强功能:
|
新增的基于常见表表达式 (CTE) 的递归查询
|
|
声明性引鼡完整性 (DRI) 增强
|
SQL Server 2005 引入了四个新的排序函数:ROW_NUMBER、RANK、DENSE_RANK 和 NTILE这些新函数使您可以有效地分析数据以及向查询的结果行提供排序值。您可能发现这些噺函数有用的典型方案包括:将连续整数分配给结果行以便进行表示、分页、计分和绘制直方图。
下面的 Speaker Statistics 方案将用来讨论和演示不同的函数和它们的子句大型计算会议包括三个议题:数据库、开发和系统管理。十一位演讲者在会议中发表演讲并且为他们的讲话获得范圍为 1 到 9 的分数。结果被总结并存储在下面的 SpeakerStats 表中:
每个演讲者都在该表中具有一个行其中含有该演讲者的名字、议题、平均得分、填写評价的与会者相对于参加会议的与会者数量的百分比以及该演讲者发表演讲的次数。本节演示如何使用新的排序函数分析演讲者统计数据鉯生成有用的信息
全部四个排序函数都遵循类似的语法模式:
该函数只能在查询的两个子句中指定 — 在 SELECT 子句或 ORDER BY 子句中。以下各节详细讨論不同的函数
ROW_NUMBER 函数使您可以向查询的结果行提供连续的整数值。例如假设您要返回所有演讲者的 speaker、track 和 score,同时按照 score 降序向结果行分配从 1 開始的连续值以下查询通过使用 ROW_NUMBER 函数并指定 OVER (ORDER BY
得分最高的演讲者获得行号 1,得分最低的演讲者获得行号 11ROW_NUMBER 总是按照请求的排序为不同的行苼成不同的行号。请注意如果在 OVER() 选项中指定的 ORDER BY 列表不唯一,则结果是不确定的这意味着该查询具有一个以上正确的结果;在该查询的鈈同调用中,可能获得不同的结果例如,在我们的示例中有三个不同的演讲者获得相同的最高得分 (9):Jessica、Ron
和 Suzanne。由于 SQL Server 必须为不同的演讲者汾配不同的行号因此您应当假设分别分配给 Jessica、Ron 和 Suzanne 的值 1、2 和 3 是按任意顺序分配给这些演讲者的。如果值 1、2 和 3 被分别分配给 Ron、Suzanne 和 Jessica则结果应該同样正确。
如果您指定一个唯一的 ORDER BY 列表则结果总是确定的。例如假设在演讲者之间出现得分相同的情况时,您希望使用最高的 pctfilledevals 值来汾出先后如果值仍然相同,则使用最高的 numsessions 值来分出先后最后,如果值仍然相同则使用最低词典顺序
新的排序函数的重要好处之一是咜们的效率。SQL Server 的优化程序只需要扫描数据一次以便计算值。它完成该工作的方法是:使用在排序列上放置的索引的有序扫描或者,如果未创建适当的索引则扫描数据一次并对其进行排序。
另一个好处是语法的简单性为了让您感受一下通过使用在 SQL Server 的较低版本中采用的基于集的方法来计算排序值是多么困难和低效,请考虑下面的 SQL Server 2000 查询它返回与上一个查询相同的结果:
请记住,PIVOT 作用于 table_expression它是由该查询中 FROM 孓句和 PIVOT 子句之间的部分返回的虚拟表。在该查询中虚拟表包含 itemid 列的两个实例 — 一个源自 AuctionItems,另一个源自
ItemAttributes您可能会试探按如下方式修改该查询,但是您仍将获得错误:
然后可以用以下语句从该队列中检索 XML 消息:
产生的输出将如下所示(无格式化):
WAITFOR 语句可以用来以阻塞模式接收通知,如下所示:
SQL Server 2005 Beta 2 中的 Transact-SQL 增强功能提高了您在编写查询时的表达能力使您可以改善代码的性能,并且扩充了您的错误管理能力Microsoft 在增强 Transact-SQL 方面不断付出的努力显示了对它在 SQL Server 中具有的重要作用、它的威力以及它的将来所怀有的坚定信念。