SQL Server 2008中有关XML的新功能(3)_Mssql数据库教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:在SQL Server实例之间传输登录和密码
概要 在将数据库移动到新服务器后,用户可能无法登录到新服务器。相反,他们会收到下面的错误消息: Msg 18456, Level 16, State 1 Login failed for user '%ls'. 您必须将登录和密码传

  

2.3 SQL Server 2008中的XML功能

XML功能是在SQL Server 2000和SQL Server 2005中推出的,在SQL Server 2008中得到了增强。在SQL Server 2008中主要的与XML相关的改进包括:

· 改进了schema 验证能力

· 增强了对XQuery 的支持

· 增强了XML数据操纵语言(DML)的插入功能

本篇白皮书的其余部分描述了这些增强之处,并介绍了你怎样在SQL Server 2008中使用它们来实现更好的XML解决方案。

3 增强了XML Schema验证功能

你可以使用一个或多个XSD schema执行遵从性检查,以此来验证XML数据。一个schema为某个特定的XML数据结构定义被允许的XML元素和属性,并通常用于确保XML文档按正确的结构包含进了所要求的所有数据元素。

SQL Server 2005推出了通过使用XML schema 集合来进行XML数据验证。一般的方法是使用CREATE XML SCHEMA COLLECTION语句创建包含了针对你的XML数据的schema 规则的schema集合,然后当你要定义一个必须符合这个schema 集合中的schema 规则的xml字段或变量时参照这个schema集合名称。然后SQL Server会按照这个schema集合中的schema规则来验证插入或更新进这个字段或变量的所有数据。

在SQL Server 2005中的XML Schema支持实现了一个广泛的纯XML Schema规格的子集,并涵盖了最常见的XML验证场景。SQL Server 2008扩展了这个支持,使得它包含下面新增加的由客户确定的schema 验证要求:

· 对lax 验证的支持

· 对dateTime、time和date 验证的完全支持,包括时区信息的保存。

· 改进了对union和list类型的支持

3.1 支持Lax验证

XML Schema通过使用any、anyAttribute和anyType声明来支持XML文档中的通配符。例如,看看下面的XML schema 声明:

<xs:complexType name="Order" mixed="true">
 <xs:sequence>
  <xs:element name="CustomerName"/>
  <xs:element name="OrderTotal"/>
  <xs:any namespace="##other" processContents="skip"
minOccurs="0" maxOccurs="unbounded"/>
 </xs:sequence>
</xs:complexType>

这个schema 声明定义了一个叫做Order 的XML元素,它必须包含叫做CustomerName和OrderTotal的子元素。此外,这个元素可以包含Order类型所属的命名空间之外的其它命名空间的无限制数目的其它元素。下面的XML显示了一个包含由这个schema 声明所定义的Order 元素的一个实例的XML文档。注意这个order 还包含了一个shp:Delivery 元素,它没有在schema中明确定义。

<Invoice xmlns="http://adventure-works.com/order"
  xmlns:shp="http://adventure-works.com/shipping">
  <Order>
  <CustomerName>Graeme Malcolm</CustomerName>
  <OrderTotal>299.99</OrderTotal>
  <shp:Delivery>Express</shp:Delivery>
  </Order>
</Invoice>

对通配符的验证取决于在schema定义中的通配符的processContents 属性。在SQL Server 2005中,schema可以使用用于any和anyAttribute声明的skip和strict 的processContents值。在前面的示例中,这个通配符元素的processContents属性被设置为skip,所以不会对这个元素的内容进行验证。即使这个schema集合包含一个对shp:Delivery元素的声明(例如,定义一组有效的发送方法对Order元素中的通配符),这个元素也不会被验证,除非在Order元素中对通配符的声明将它的processContents属性设置为strict。

SQL Server 2008增加了对第三方验证的支持。通过将一个通配符的processContents属性设置为lax ,你可以对具有相应的schema 声明的任何元素进行验证,但忽略没有在schema 中定义的所有元素。继续前面的示例,如果你将schema中对通配符元素的声明中的processContents属性设置为lax 并增加一个对shp:Delivery元素的声明,那么在XML文档中的shp:Delivery 元素会被进行验证。然而,如果不是shp:Delivery 元素,而是该文档包含了一个没有在schema中声明的元素,那么这个元素会被忽略掉。

此外,XML Schema 规格定义anyType声明具有对它的内容模型的lax处理方式。SQL Server 2005不支持lax处理,所以会严格的对内容进行验证。SQL Server 2008支持anyType 内容的lax处理,因此内容会被正确的进行验证。

3.2 对 xs:dateTime 的完全支持

你可以在一个XML schema 中使用dateTime数据类型来定义日期和时间数据。日期和时间数据以2007-08-01T09:30:00:000Z的格式来显示,这表示的是通用协调时(UTC)2007年8月1日早上9:30,这用Z表示。其它的时区显示的时间与通用协调时间不同,因此例如你能使用太平洋标准时间2007-12-25T06:00:00:000-8:00来显示2007年12月25日的早上6:00(它比UTC时间滞后8小时)。

XML Schema 规格定义了可选择的dateTime、date和time 数据类型的时区组件。然而,在SQL Server 2005中你必须提供一个用于dateTime、date和time数据的时区。此外,SQL Server 2005不保存你的dateTime或time数据的时区信息,但是会将它规格化为UTC时间(所以例如,如果你的XML有个2007-12-25T06:00:00:000-8:00的值,SQL Server 2005会将它规格化为2007-12-25T14:00:00:000Z。)在SQL Server 2008中没有这些限制,所以当你存储dateTime、date或time数据时你可以省略时区信息,并且你提供的任何时区信息都会被保存下来。

分享:也谈如何缩小SQL SERVER日志文件
前几天也碰到日志文件过大的问题,数据库实际大小为600M, 日志文件实际大小为33M, 但日志文件占用空间为2.8G! 试了多种方式,SHIRNK DATABASE, TRUNCATE LOG FILE, 都没办法将文件缩小。无论

来源:模板无忧//所属分类:Mssql数据库教程/更新时间:2008-08-22
相关Mssql数据库教程