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

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

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

3.3 Union和List类型

你可以使用XML schema 将你的XML数据的数据类型定义为允许将一个有限集合的值赋给具有多个值的元素和属性。例如,你可能定义一个sizeListType类型,它使产品定义中的一个AvaliableSizes元素的赋值限制为S、M和L。SQL Server 2005支持XML schema包含这些简单的类型定义和限制。例如,你可以使用一个list类型来定义一个产品的有效的型号,如下面的示例所示:

<xs:simpleType name="sizeListType">
  <xs:list>
  <xs:simpleType>
    <xs:restriction base="xs:string">
  <xs:enumeration value="S"/>
  <xs:enumeration value="M"/>
  <xs:enumeration value="L"/>
  </xs:restriction>
  </xs:simpleType>
  </xs:list>
</xs:simpleType>

这个schema 声明使你可以创建一个列出所有型号的元素,其中产品可以按照被空格分开的一组值来购买,如下面的示例所示:  

<AvailableSizes>S M L</AvailableSizes>

然而,如果你想支持两种不同的方式来表达一个产品的型号呢?例如,假设一个自行车产品零售商卖具有大、中、小型号的骑自行车穿的衣服,但是还想按照衣服尺寸来卖(例如18、20、22和24)?为了使你能够这样做,SQL Server 2008增加了对包含list类型的union类型的支持,你可以使用它将多个类型定义和限制合并到一个单独的类型中去。例如,下面的Transact-SQL代码创建了一个XML schema集合,它定义了一个productSizeType类型,其中有效值包括一组数字型号(18、20、22和24)和一组名称型号(S、M和L)。

CREATE XML SCHEMA COLLECTION CatalogSizeSchema AS N'<?xml version="1.0" encoding="UTF-16"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">  <xs:simpleType name="productSizeType">    <xs:union>      <xs:simpleType>       <xs:list>       <xs:simpleType>        <xs:restriction base="xs:integer">         <xs:enumeration value="18"/>         <xs:enumeration value="20"/>         <xs:enumeration value="22"/>         <xs:enumeration value="24"/>        </xs:restriction>       </xs:simpleType>       </xs:list>      </xs:simpleType>      <xs:simpleType>       <xs:list>       <xs:simpleType>        <xs:restriction base="xs:string">         <xs:enumeration value="S"/>         <xs:enumeration value="M"/>         <xs:enumeration value="L"/>        </xs:restriction>       </xs:simpleType>       </xs:list>      </xs:simpleType>    </xs:union>  </xs:simpleType></xs:schema>'

有了schema中的这个声明,任何基于productSizeType 的元素都可以包含任何种类的列表;所以下面示例中的两种产品元素都是productSizeType数据类型的有效的实例。

<Catalog>
  <Product>
  <ProductName>Road Bike</ProductName>
  <AvailableSizes>22 24</AvailableSizes>
  </Product>
  <Product>
  <ProductName>Cycling Jersey</ProductName>
   <AvailableSizes>S M L</AvailableSizes>
  </Product>
  </Catalog>

类似的,SQL Server 2008支持对包含union 类型的list 类型的schema 声明。

4 增强了XQuery

SQL Server 2005推出了xml 数据类型,它提供了一些你可以使用的方法来对存储在一个列或变量中的XML数据进行操作。你可以执行的大多数操作都使用XQuery语法来操纵和使用XML数据。SQL Server 2005所支持的XQuery 语法包括被称作FLWOR 表达式的for、where、order by和return 条件子句,你可以使用它来循环迭代一个XML文档的节点和返回结果值。

SQL Server 2008增加了对let条件子句的支持,它是用来在XQuery表达式中对变量进行赋值的,例如下面的示例:

declare @x xml
  set @x=
  '<Invoices>
  <Invoice>
   <Customer>Kim Abercrombie</Customer>
   <Items>
   <Item ProductID="2" Price="1.99" Quantity="1" />
   <Item ProductID="3" Price="2.99" Quantity="2" />
   <Item ProductID="5" Price="1.99" Quantity="1" />
   </Items>
  </Invoice>
  <Invoice>
   <Customer>Margaret Smith</Customer>
   <Items>
   <Item ProductID="2" Price="1.99" Quantity="1"/>
   </Items>
  </Invoice>
  </Invoices>'
  SELECT @x.query(
  '<Orders>
  {
  for $invoice in /Invoices/Invoice
  let $count :=count($invoice/Items/Item)
  order by $count
  return
  <Order>
  {$invoice/Customer}
  <ItemCount>{$count}</ItemCount>
  </Order>
  }
</Orders>')

这个例子返回下面的XML:

<Orders>
<Order>
 <Customer>Margaret Smith</Customer>
 <ItemCount>1</ItemCount>
</Order>
<Order>
 <Customer>Kim Abercrombie</Customer>
 <ItemCount>3</ItemCount>
</Order>
</Orders>

要注意SQL Server 2008不允许对构造元素赋值。

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

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