在SQLServer中用XQuery分解XML数据

2016-01-29 15:48 87 1 收藏

在SQLServer中用XQuery分解XML数据,在SQLServer中用XQuery分解XML数据

【 tulaoshi.com - SQLServer 】

我们了解到OPENXML使用起来简单直接,但非常占用内存。本周,我们讨论SQL Server 2005的新功能,它允许你将XML数据分解到关系格式中,而不必耗用太多内存。

  在举例说明如何分解上一篇文章中的数据时,我们首先了解一下XQuery和它在SQL Server 2005中为开发者提供的功能。

  XQuery介绍

  XQuery,也称作XML Query,是一种查询XML数据的语言,允许你提取所需的节点和元素。它由W3C定义,可用于今天的大多数主流数据库引擎中,如Oracle、DB2和SQL Server。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/sqlserver/)

  SQL Server 2005 XQuery函数

  下面的四个函数是SQL Server 2005中的XQuery函数。(注意,XML、XQuery语句和下面的函数都区分大小写。例如,SQL编译器接受XML数据中的.exist,但拒绝.EXIST或.Exist。)

  xml.exist

  这个方法根据一个XML节点上的搜索表达式返回一个布尔值。例如,列表A中XML代码片段中的语句将返回1(真):

  SELECT @x.exist('/christmaslist/person[@gift = "socks"]')

  这个语句返回0(假):

  SELECT @x. exist ('/christmaslist/zach')

  由于“Socks”一词被封套,这个语句将返回0(假)。

  SELECT @x.exist('/christmaslist/person[@gift = "socks"]')

  xml.value

  这个方法接受一个XQuery语句并返回一个单独值。使用列表A中同样的XML代码片段,不可以使用VALUE函数生成“betty”值,如下所示:

  SELECT @x.value('/christmaslist[1]/person[1]/@name', 'VARCHAR(20)')

  而XQuery生成“zach”值。

  SELECT @x.value('/christmaslist[1]/person[2]/@name', 'VARCHAR(20)')

  xml.query

  这个方法接受一个XQuery并返回一个XML数据类型的实例。可以按需要将这些查询简单或复杂化,下面是一个简单的例子:

  SELECT @x.query('/christmaslist/person')

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/sqlserver/)

  它返回XML文件:

以下是引用片段:
<person name="betty" gift="camera" /
<person name="zach" gift="elmo doll" /
<person name="brad" gift="socks" /

  xml.nodes

  在你需要将一个XML数据类型变量中的数据分解到关系数据中时,这个方法十分有用。这个方法接受一个XQuery语句作为参数,并返回一个包含XML变量逻辑标量数据的行集。列表B中的查询利用上面定义的XML变量,并将数据分解到一个结果集中,它显示在XML变量中定义的人物姓名。

  修改OPENXML存储过程

  现在我来说明如何修改上周的OPENXML存储过程,使其可以应用XQuery功能。首先,我往XML变量中加载一些数据。如列表C所示。我们可以建立一个接受XML参数的过程,再应用XQuery函数把XML文件中的数据插入一个表中,而不必应用OPENXML。如列表D所示。

  最初在数据库中应用XML似乎有些难于处理,还要花一些时间习惯使用XQuery和Xpath查询。但是,经过一段时间的学习以后,你就会发现在数据库中应用XML数据相当实用。

  例如,在上述存储过程中应用XML数据,你只需调用一次数据库,而不必像典型存储过程编程那样调用N次数据库。这二者似乎区别不大,但对一个繁忙的系统而言,应用XML数据会有很大益处。而且,应用XQuery而非OPENXML还会显著提高性能,对小型XML文件更是如此。

来源:http://www.tulaoshi.com/n/20160129/1496507.html

延伸阅读
标签: Web开发
       要对一个XML文档进行阅读、更新、创建及操作,你需要一个XML 分解器。        使用XML分解器         Microsoft XML 分解器是Microsoft Internet Explorer 5.0 中携带的。一旦你安装了IE 5.0,在HTML文档和ASP文件中的脚本都可以使用分...
代码如下: DECLARE @TempTable table(UserID int , UserName nvarchar(50)); insert into @TempTable (UserID,UserName) values (1,'a') insert into @TempTable (UserID,UserName) values (2,'b') select UserID,UserName from @TempTable FOR XML PATH 运行这段脚本,将生成如下结果: 代码如下: row UserID1/UserID UserNamea...
如果你的硬盘空间小,并且不想设置数据库的日志为最小(因为希望其他正常的日志希望仍然记录),而且对速度要求比较高,并清除所有的数据建议你用turncate table1,因为truncate 是DDL操作,不产生rollback,不写日志速度快一些,然后如果有自增的话,恢复到1开始,而delete会产生rollback,如果删除大数据量的表速度会很慢,同时会占用很多的roll...
标签: ASP
  我们知道,一般的关系数据库(如SQL Server、Oracle、Access等)中的查询操作是支持集合操作的, 例如可以用“Update ATable Set Field1 = AValue where Field2 in (Value21,Value22)”来完成对数据 库的成批更新操作。我们可以充分利用数据库的这种集合特性来提高ASP页面操作数据库的效率。如我们 可以在页面上列出多个记录,让用户...
标签: Web开发
带验证的阅读器 XmlValidatingReader类实现了XmlReader类,它提供了支持多种类型的XML验证:DTD,XML-Data Reduced(XDR)架构,以及XSD,DTD和XSD都是W3C官方推荐的。而XDR是Microsoft早期用于处理XML构架的一种格式。 你可以用XmlVlidatingReader类去验证XML文档和XML片断。XmlValidatingReader类工作在XML阅读器上面---是一个典型的XM...

经验教程

501

收藏

63
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部