科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航



ZDNet>网络频道>ZD评测>深入讲解SQL Server 2005的数据库开发

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

作为一个数据库开发人员,现在你可以更好的把工作关注在功能、对本机格式的数据的访问(如XML)、以及利用强大的数据库服务器创建更复杂的系统上。

来源:天新网 2008年03月22日

关键字:数据库 Mssql SQL SQL Server

SQL Server Mobile Edition  

在SQL Server 2000 中出现的 SQL Server 2000 Windows CE 版现已是SQL Server Mobile 3.0版。在其中有很多和开发人员有关的新的关键特性:  

1.你现在可以直接用SQL Server Management Studio 在桌面或设备上创建一个SQL Server Mobile 版数据库。你也可以直接从SQL Server Management Studio中操作这个数据库的模式,而无需考虑这个数据库是在桌面还是在移动设备上。你可以使用SQL Server Management Studio来对设备或桌面上的SQL Server Mobile 版数据库允许查询。你可以充分利用新的SQL Server Mobile 版的特性:一个GUI界面的XML showplan,就像本机SQL Server一样,可以使用查询暗示来覆盖SQL Server Mobile的查询优化器。这是第一次可以在设备上控制优化计划。

2.你现在可以对DTS对象编码来交换数据。

3.在SQL Server 2005中从SQLResult 集派生出新的SqlCeResult 集。这将使得SQL Server Mobile版有个真正可滚动的、可更新的光标。它也允许绑定到设备上的数据对象。

4.你可以在主应用程序打开的同时编写一个应用程序来同步数据,你现在可以在同一时刻用两个不同的应用程序来访问设备上的同一个数据库。

5.你可以对同步状态栏进行编程以得到同步状态通知,以前没有办法做到这一点,无法通知用户设备并没有停止响应。

6.你可以通过更为主动的页回收策略来维护一个更小的数据库。

7.你可以使用SQL Server语法来共享参数查询代码。  

语言增强  

Transact-SQL 增强  

Transact-SQL 一直以来就是SQL Server所有编程的基础。SQL Server 2005 Beta 2 提供了很多新的语言功能用以开发可伸缩的应用程序。这些增强包括错误处理、新的递归查询功能、对新的SQL Server数据库引擎功能的支持等。SQL Server 2005 Beta 2 中的 Transact-SQL 增强功能提高了您在编写查询时的表达能力,使您可以改善代码的性能,并且扩充了您的错误管理能力。Microsoft 在增强 Transact-SQL 方面不断付出的努力显示了T-SQL在 SQL Server 中具有的重要作用、T-SQL的威力以及对它的将来所怀有的坚定信念。  

递归查询和通用表表达式  

通用表表达式 (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 Beta 2的发布,数据库开发的方式正在改变中。作为一个数据库开发人员,现在你可以更好的把工作关注在功能、对本机格式的数据的访问(如XML)、以及利用强大的数据库服务器创建更复杂的系统上。数据库开发工作正前所未有的越来越集成,你所需要的所有工具都触手可及。  

.net Framework集成

随着Microsoft SQL Server 2005 Beta 2的发布,数据库编程人员现在可以充分利用Microsoft .NET Framework 类库和现代编程语言来开发数据库应用。 通过集成的CLR,你可以用.NET Framework language 里的Visual Basic .NET 和C#中面向对象的结构、结构化的错误处理、数组、命名空间和类来编写存储过程、函数和触发器。此外,.NET Framework所提供的几千个类和方法也扩展了服务器功能,使你能够更容易的在服务器端使用。许多之前我们用T-SQL难以实现的任务现在可以更容易的用托管代码实现。同时,系统还新增了两个数据库对象类型:聚合和用户自定义类型。你现在能够更好的利用已掌握的知识和技能编写in-process 代码。总之,SQL Server 2005 Beta 2 能够使你的数据库服务器更方便地在后台执行适当的计算和操作。  

SQL Server 和 CLR 的集成主要提供了如下好处:

1.增强的编程模型:.NET Framework 兼容的编程语言在很多方面要比T-SQL更强大,它提供给SQL 开发人员之前没有的架构和功能。

2.增强的安全性: 在CLR环境下运行的托管代码被数据库引擎所控制,这使得.NET Framework 数据库对象能够比以前版本的SQL Server中的扩展存储过程运行的更安全,并具备更好的安全性。

3.用户自定义类型和聚合: 借助宿主CLR,这两个新的数据库对象扩展了SQL Server 的存储和查询能力。

4.通用开发环境: 数据库开发被集成到Microsoft Visual Studio 2005 开发环境中。 用来开发中间层和客户层.NET Framework组件和服务的工具同样可以被用来开发和调试数据库对象和脚本。

5.性能和可伸缩性: 因为托管代码被编译为本机代码得以优先执行,在某些场合性能可以得到显著的提升。

6.利用CLR集成,你可以用Visual Basic .NET 和 C#这样的语言写出具有更复杂逻辑的代码和更适用于计算型任务的代码。而且,Visual Basic .NET 和 C# 还提供了诸如封装、继承、多态这样的面向对象的功能。你现在可以更容易的把代码和类、命名空间组织在一起,这意味着你更容易组织和维护在工作中产生的大量代码。这种从逻辑上和物理上把代码组织到程序集和命名空间中的功能非常有用,它将使你能够更好的在一个大型数据库实现项目中发现和关联不同的代码块。  

托管代码在处理运算和管理复杂执行逻辑上比T-SQL更有效,并且提供了对字符串处理、正则表达式之类功能的额外支持。此外,由于现在可以利用.NET Framework类库的功能,你可以更容易的从存储过程、触发器、用户定义函数中访问几千个内置的类和例程(routines)。通过托管存储过程、函数、触发器、聚合,可以更容易的实现字符串处理、数学函数、日期操作、系统自由访问、高级加密算法、文件访问、图像处理、XML数据操作等功能。  

托管代码的一个主要好处就是类型安全。在托管代码执行前,CLR将执行一些检查,通过一个被称之为“验证”的处理过程来保证所执行的代码是安全的。例如,会检查代码以确保不会读未写的内存地址。 

在Transact-SQL 和 托管代码之间的选择  

当编写存储过程、触发器、用户自定义函数时,你现在要决定是使用传统的Transact-SQL 还是.NET Framework兼容的编程语言,如Visual Basic .NET or C#来编写它们。这个问题的答案依赖于使用的场合,在某些情形下,你会使用Transact-SQL,而另外一些情形下,你将使用托管代码。  

Transact-SQL 更适合代码主要是进行数据访问、没有逻辑或逻辑简单的场合。托管代码更适合密集计算和复杂逻辑的场合,或者是那些你想利用.NET Framework 类库的场合。  

代码放置也很重要。你可以把Transact-SQL 和托管代码都放在服务器上运行,代码和数据的紧密结合使你能够充分利用服务器的处理能力。而且因为它减少了数据层和中间层之间的流量,所以这非常有益。特别是对I/O密集的系统,可能会有显著的好处。CLR 函数也可以利用到SQL Server 查询处理器的并行和优化功能。另一方面,你可能不希望把密集计算的任务放在数据库服务器上,现在的大多数客户端计算机都很强大,你可能希望把尽可能多的代码放到客户端来利用其处理能力。这没有一成不变的答案。

Web Services

在SQL Server 2005中,你可以开发数据库层的XML Web services,把SQL Server 作为一个HTTP listener。这对那些以Web services为中心的应用程序提供了新型的数据访问功能。在SQL Server 2005 Beta 2中,你可以使用HTTP直接访问SQL Server,无需使用IIS这样的中间层listener。SQL Server 开放了一个 Web service 接口,可以执行SQL语句和调用函数和过程,查询结果可用XML格式返回,并且可以利用Visual Studio 的Web services 架构。  

ADO.NET  

很多新的功能出现在下一个版本的ADO.NET中。从查询改变通知到多活动结果集(MARS),ADO.NET使数据访问和操作更加可伸缩和灵活。  

ADO.NET 通知支持

SQL Server 2005 Beta 2 引入了对SQL Server 查询的通知支持。你可以使用这一功能来发送一个命令到SQL Server,并且要求当其后运行的同样命令产生不同的结果时,SQL Server生成一个通知。这一功能是通过从属对象检测到基础数据的改变来实现的。可用通过多种客户端API将命令发送到服务器,如:ADO.NET, OLE DB, Open Database Connectivity (ODBC), Microsoft ActiveX Data Objects (ADO), 或 SOAP等,这些命令可能包含一个通知请求的tag。对于被作为请求一部分的被执行的每一条语句,服务器都会为请求中的每一条语句创建一个“通知订阅”。通知通过一个SQL Service Broker 队列传递,应用程序可以轮询,并且无论通知是否可用,都可以使用活动服务,或者阻碍语句的返回。查询通知对于在那些数据库驱动Web 站点应用程序中启用结果缓存非常有用。

推广二维码
邮件订阅

如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

重磅专题