网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.DBA创建用户帐户及分配特定特权的.
.某些 SQL Server 2000 和 SQL Se.
.解决问题: sql server 2000 企业.
.如何用SQL写出当M*N时的螺旋矩阵.
.SQL Sever 2000中的前触发器和后.
.数据库的数据挖掘概述(二).
.SQL Server的空值处理策略.
.PowerDesigner实现导出的SQL语句.
.用Caché的Speedminer构建和部署.
.调查表明开源软件的维护与支持问.
.深入探讨数据仓库建模与ETL的实践.
.sql server 2000中循环插入100万.
.利用数据库复制技术 实现数据同步.
.用共享游标提升 SQL 性能.
.ms sql删除重复的记录 .
.解决SQL Server 2000 JDBC 驱动程.
.如何正确的使用or展开来改写SQL查.
.带你深入了解数据库设计中的英文.
.在Linux下访问MS SQL Server数据.
.用SQL语句完成SQL Server数据库的.

在SQL Server中用XQuery分解XML数据

发表日期:2006-12-31


本文讨论SQL Server 2005的新功能,它允许你将XML数据分解到关系格式中,而不必耗用太多内存。

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

XQuery介绍

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

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')
 

它返回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文件更是如此。

上一篇:从旧版本SQL Server中重新存储数据 人气:3728
下一篇:用OPENXML函数将XML数据转为关联数据 人气:4013
浏览全部SQL Server的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐