Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)归海一刀
published in(发表于) 2014/2/1 0:10:31
SQL,Server,2005数据库开发概述(3)_[SQL,Server教程]

SQL Server 2005数据库开发概述(3)_[SQL Server教程]

递归查询和通用表表达式



  通用表表达式 (CTE) 是一个可以由定义语句引用的临时命名的结果集。在它们的简单形式中,您可以将 CTE 视为更类似于非持续性类型视图的派生表的改进版本。在查询的 FROM 子句中引用 CTE 的方式类似于引用派生表和视图的方式。只须定义 CTE 一次,即可在查询中多次引用它。在 CTE 的定义中,可以引用在同一批处理中定义的变量。您甚至可以在 INSERT、UPDATE、DELETE 和 CREATE VIEW 语句中以与使用视图类似的方式使用 CTE。但是,CTE 的真正威力在于它们的递归功能,即 CTE 可以包含对它们自身的引用。当您希望像引用表一样引用查询结果,但是不希望在数据库中创建持久性视图时,可以使用派生表。但是,派生表具有 CTE 中所不具有的限制:您无法只在查询中定义派生表一次然后多次使用它。相反,您必须在同一查询中定义多个派生表。但是,您可以定义 CTE 一次并在查询中多次使用它,而无须在数据库中持续保存它。


  非递归 CTE 可以改善语句的表达能力。但是对于每一段使用非递归 CTE 的代码,您通常可以通过使用其他 Transact-SQL 结构(例如,派生表)来实现同一功能,只不过代码更长点。对于递归 CTE,情况则迥然不同。当 CTE 引用它本身时,它被视为递归的。递归的 CTE 是根据至少两个查询(或者,用递归查询的说法,为成员)构建的。一个是非递归查询,也称为锚定成员 (AM)。另一个是递归查询,也称为递归成员 (RM)。查询由 UNION ALL 运算符连接为一个单独的CTE。


  PIVOT 和 UNPIVOT 操作符


  SQL Server 2005 Beta 2 提供了两个新的关系运算符: PIVOT 和 UNPIVOT, 你可以在查询的FROM子句中使用它。它们对一个输入表值表达式执行某种操作,并且产生一个输出表作为结果。PIVOT 运算符将行旋转为列,并且可能同时执行聚合。它基于给定的枢轴列扩大输入表表达式,并生成一个带有与枢轴列中的每个唯一值相对应的列的输出表。


  PIVOT 运算符可用来处理开放架构方案以及生成交叉分析报表。在开放架构方案中,您需要用事先不知道或因实体类型而异的属性集来维护实体。应用程序的用户动态定义这些属性。您将属性拆分到不同的行中,并且只为每个实体实例存储相关的属性,而不是在表中预定义很多列并存储很多空值。PIVOT 使您可以为开放架构和其他需要将行旋转为列的方案生成交叉分析报表,并且可能同时计算聚合并且以有用的形式呈现数据。


  UNPIVOT 运算符执行与 PIVOT 运算符相反的操作;它将列旋转为行。它基于旋转列收缩输入表表达式。UNPIVOT 运算符使您可以规格化预先旋转的数据。


APPLY 操作符



  通过 APPLY 运算符,SQL Server 2005 Beta 2 使您可以在相关子查询中引用表值函数。APPLY 关系运算符使您可以针对外部表表达式的每个行调用指定的表值函数一次。您可以在查询的 FROM 子句中指定 APPLY,其方式与使用 JOIN 关系运算符类似。APPLY 具有两种形式:CROSS APPLY 和 OUTER APPLY。


  CROSS APPLY 为外部表表达式中的每个行调用表值函数。您可以引用外部表中的列作为该表值函数的参数。CROSS APPLY 从该表值函数的单个调用所返回的所有结果中返回统一的结果集。如果该表值函数对于给定的外部行返回空集,则不会在结果中返回该外部行。


  OUTER APPLY 非常类似于 CROSS APPLY,但是它还从表值函数为其返回空集的外部表中返回行。空值作为与表值函数的列相对应的列值返回。


  事务异常处理


  以前版本的 SQL Server 要求在每个怀疑可能出错的语句之后包含错误处理代码,就象Microsoft Visual Basic 6.0那样。要将错误检查代码集中在一起,必须使用标签和 GOTO 语句。此外,诸如数据类型转换错误之类的错误会导致批处理终止;因此,无法用 Transact-SQL 捕获这些错误。SQL Server 2005 Beta 2 引入了一种简单而强大的异常处理机制:TRY...CATCH Transact-SQL 结构,就象Visual Basic .NET and C#中那样。现在可以捕获和处理过去会导致语句、级、批、或事务处理终止的错误,前提是这些错误不会导致连接中断(通常是严重度为 21 及以上的错误,例如,表或数据库完整性可疑、硬件错误等等)。


  为了实现错误处理,只需要把想执行的代码写入BEGIN TRY/END TRY 块中,接着把错误处理代码写入BEGIN CATCH /END CATCH 块中。注意一个 TRY 块必须要有一个对应的CATCH 块,否则,将会出现语法错误。


  DDL 事件通知


  SQL Server 2005 Beta 2 使您可以捕获 DDL 和系统事件,并且向 Service Broker 部署发送事件通知。和触发器地同步处理相反的是,事件通知是一种允许异步使用的事件传递机制。事件通知将 XML 数据发送给指定的 Service Broker 服务,而事件使用者异步使用该数据。事件使用者可以在Service Broker接受语句中使用的WAITFOR 子句扩展来等待新数据的到达。


  Full Text 搜索增强


  SQL Server 2005 支持强大的full-text应用程序。编目能力得以加强以提供对目录的更大的灵活性, 查询性能和可伸缩性也有了巨大的提升,新的管理工具也为full-text 实施提供更强的功能。



安全增强



  SQL Server 2005 受益于微软公司提出的可信赖计算——微软公司旨在提高客户在安全性、私有性、可靠性和业务完整性领域体验的计划。作为微软公司在2002年1月在全公司范围内实施计划的一部分,微软随后引入了新的开发流程,使得开发的产品无论是在设计、默认设置还是在部署方面,安全性都得到充分的保证。SQL Server开发团队已经将这个新的流程带入到SQL Server下一代版本——SQL Server 2005的开发过程中了, 这使得SQL Server 2005 将成为有史以来最具安全性的SQL Server。


  大体上,这些新特性和改进可分为以下三个范围:


  1.控制用户访问。SQL Server 2005将提供对用户访问SQL Server更强大的控制能力,可以通过策略来限定用户的访问。

  2.禁用服务和限制服务配置。管理员能够把对SQL Server的访问限定在管理员所指定的某个范围内和某个粒度等级上,这样,管理员就能轻松地管理着一个不违反权限最低原则的系统。由于在安装时默认将禁用某些不是必需的服务,那么,管理员将更多考虑的是决定哪个服务根据需求被启用而不是去找有哪些不必要的服务需要关闭。

  3.减少新特性遭受攻击的“表面积”。从安装的那一刻开始,SQL Server 2005遭受攻击的“表面积”就将被最小化,因为在SQL Server 2005的整个开发过程中,新特性的安全性已被反复地检查和测试。


  小结

  Microsoft SQL Server 2005 为开发人员提供了构建新型数据库应用程序的多种工具。通过移去代码执行和存储之间的屏障,以及集成XML,SQL Server 2005 为数据库开发人员开启了一个无限可能的世界。本文只是对SQL Server 2005开发方面的一个介绍。

来源:csdn






If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759