您的位置:首页 > 博客中心 > 数据库 >

Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 2 -使用XQuery 查询XML数据

时间:2022-03-13 22:45

XQuery 是一个浏览/返回XML实例的标准语言. 它比老的只能简单处理节点的XPath表达式更丰富. 你可以同XPath一样使用.或是遍历所有节点,塑造XML实例的返回等.

作为一个查询语言, 你需要一个查询处理引擎. SQL Server 数据库通过XML数据类型方法的T-SQL 语句来处理XQuery. SQL Server 并不支持所有的XQuery 特性.比如XQuery 的用户自定义函数就不支持,因为你可以用T-SQL和CLR函数 .此外, T-SQL 支持非标的XQuery扩展 ,叫做 XML DML, 你可以用来修改XML数据的元素和属性. 因为XML数据类型是一个很大的对象,如果你只通过一个方法,修改xml以后直接替换这个值这样会导致巨大的性能瓶颈.

本节主讲使用XQuery检索数据,如果你要学习更多的XML数据类型,可以看第三节 . 在这个章节中,你只用XML数据类型查询方法和XML数据类型变量. 查询方法接收一个XQuery字符串参数,然后返回你要的XML .

XQuery 在 SQL Server中的实现遵循W3C( World Wide Web Consortium)标准,并且补充了数据修改的扩展.要获取更多的W3C 信息请访问 , 一些XQuery新闻和附加资源可以访问.

 

XQuery 基础

XQuery 和 XML一样大小写敏感.如果你想手动的敲打列子中得代码,请务必和写的一模一样. 比如你把data()写成Data()就会报一个 “没有Data()函数”的错误.

XQuery 返回序列(sequences).序列包含原子值(atomic values)或复杂值(complex values(XML 节点)). 任何节点,比如元素,属性,文本,处理命令,注释,或者文档,都可以包含在序列里面.当然你可以, 你可以格式化序列来获得良好格式的XML. 下面示例了三个不同序列的XML查询. 

下面是简略了的查询结果

Explicit namespace
--------------------------------------------------------------------------------
<co:Order xmlns:co="TK461-CustomersOrders" co:orderid="10692" co:orderd


Default element namespace
--------------------------------------------------------------------------------
<Order xmlns="TK461-CustomersOrders" xmlns:p1="TK461-Customers


Namespace in WITH clause
--------------------------------------------------------------------------------
<co:Order xmlns:co="TK461-CustomersOrders" co:orderid="10692" co:orderd

 

XQuery 数据类型

 

XQuery 使用了大约50个预定义的数据类型.另外在SQL Server里面dditionally, 有个sqltypes 命名空间,定义了SQL Server的类型,你已经知道SQL Server的类型,因此不用担心XQuery类型, 大部分都是用不到的.这个章节罗列的是一些主要类型.不会讲太多内容. XQuery 数据类型氛围节点类型和原子类型. 节点类型包括,属性(attribute),注释(comment), 元素(element),命名空间( namespace), 文本(text), 处理指令(processing-instruction), and document-node. 下面这些是你可能用到的主要的原子类型(atomic types) xs:boolean, xs:string,xs:QName, xs:date, xs:time, xs:datetime, xs:float, xs:double, xs:decimal, and xs:integer.

你应该先对这些类型做个简要的回顾,我们通常使用的类型,XQuery都有, 你也可以使用特定的函数来处理特定的类型. 我门会花点时间来讲解重要的XQuery函数.

 

XQuery 函数

 

正如有许多数据类型一样,XQuery 有几十个函数 .他们被分成多个类别 . 我们之前用的 data() 函数是数据访问函数. 下面是SQL Server支持的比较有用的 XQuery 函数:
■■ Numeric functions ceiling(), floor(), and round()
■■ String functions concat(), contains(), substring(), string-length(), lower-case(), and
upper-case()
■■ Boolean and Boolean constructor functions not(), true(), and false()
■■ Nodes functions local-name() and namespace-uri()
■■ Aggregate functions count(), min(), max(), avg(), and sum()
■■ Data accessor functions data() and string()
■■ SQL Server extension functions sql:column() and sql:variable()

通过Books Online的这篇文档 “XQuery Functions against the xml Data Type”  . 你可以快速的判别 哪个函数可以用那种数据类型. 

下面是使用聚合函数count()和max()来检索 XML文档中每个客户的订单信息的例子.

正如你所见, 这个 XQuery比前面一个列子更复杂. 查询使用了迭代,也就是 XQuery FLOWER 表达式. 同时在查询中设定XML的返回格式. FLWOR 表达式稍后会讲, 现在就当如何在XQuery中使用聚合函数的示例就行. 结果如下:

SELECT @x.query(‘(/CustomersOrders/Customer/
Order/parent::Customer)[2]‘)
AS [6. 2nd Customer with at least one Order];

Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 2 -使用XQuery 查询XML数据,布布扣,bubuko.com

热门排行

今日推荐

热门手游