SQL Server 2008中有关XML的新功能(4)_Mssql数据库教程
推荐:在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, 都没办法将文件缩小。无论
- sql 语句练习与答案
- 深入C++ string.find()函数的用法总结
- SQL Server中删除重复数据的几个方法
- sql删除重复数据的详细方法
- SQL SERVER 2000安装教程图文详解
- 使用sql server management studio 2008 无法查看数据库,提示 无法为该请求检索数据 错误916解决方法
- SQLServer日志清空语句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸载方法(其他版本类似)
- sql server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表
- SQL Server 2008 清空删除日志文件(瞬间日志变几M)
- Win7系统安装MySQL5.5.21图解教程
- 将DataTable作为存储过程参数的用法实例详解
- 相关链接:
- 教程说明:
Mssql数据库教程-SQL Server 2008中有关XML的新功能(4)。