本文从此而来
http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html
SQL Server数据库中FOR XML PATH 是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数和存储过程来完成的工作。本文以实例的形式演示了FOR XML PATH的使用过程,希望会对读者有所帮助。
AD:
FOR XML PATH是将查询结果集以XML形式展现,使用它我们可以简化我们查询语句的操作。本文先介绍了FOR XML PATH 的基本操作,然后结合实例将FOR XML PATH 的强大功能予以说明。
一.FOR XML PATH 简单介绍
那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下:
用FOR XML PATH将查询结果以XML输出
接下来我们来看应用FOR XML PATH的查询结果语句如下:
SELECT * FROM @hobby FOR XML PATH
结果:
<row> <hobbyID>1</hobbyID> <hName>爬山</hName> </row> <row> <hobbyID>2</hobbyID> <hName>游泳</hName> </row> <row> <hobbyID>3</hobbyID> <hName>美食</hName> </row>
由此可见FOR XML PATH 可以将查询结果根据行输出成XML格式!
那么,如何改变XML行节点的名称呢?代码如下:
SELECT * FROM @hobby FOR XML PATH('MyHobby')
结果一定也可想而知了吧?没错原来的行节点<row> 变成了我们在PATH后面括号()中,自定义的名称<MyHobby>,结果如下:
<MyHobby> <hobbyID>1</hobbyID> <hName>爬山</hName> </MyHobby> <MyHobby> <hobbyID>2</hobbyID> <hName>游泳</hName> </MyHobby> <MyHobby> <hobbyID>3</hobbyID> <hName>美食</hName> </MyHobby>
这个时候细心的朋友一定又会问那么列节点如何改变呢?还记的给列起别名的关键字AS吗?对了就是用它!代码如下:
SELECT hobbyID as 'MyCode',hName as 'MyName' FROM @hobby FOR XML PATH('MyHobby')
那么这个时候我们列的节点名称也会编程我们自定义的名称<MyCode>与<MyName>结果如下:
<MyHobby> <MyCode>1</MyCode> <MyName>爬山</MyName> </MyHobby> <MyHobby> <MyCode>2</MyCode> <MyName>游泳</MyName> </MyHobby> <MyHobby> <MyCode>3</MyCode> <MyName>美食</MyName> </MyHobby>
噢!既然行的节点与列的节点我们都可以自定义,我们是否可以构建我们喜欢的输出方式呢?还是看代码:
SELECT '[ '+hName+' ]' FROM @hobby FOR XML PATH('')
没错我们还可以通过符号+号,来对字符串类型字段的输出格式进行定义。结果如下:
[ 爬山 ][ 游泳 ][ 美食 ]
那么其他类型的列怎么自定义?没关系,我们将它们转换成字符串类型就行啦!例如:
SELECT '{'+STR(hobbyID)+'}','[ '+hName+' ]' FROM @hobby FOR XML PATH('')
好的FOR XML PATH就基本介绍到这里吧,更多关于FOR XML的知识请查阅帮助文档!
接下来我们来看一个FOR XML PATH的应用场景吧!那么开始吧。
二.一个应用场景与FOR XML PATH应用
首先呢!我们在增加一张学生表,列分别为(stuID,sName,hobby),stuID代表学生编号,sName代表学生姓名,hobby列存学生的爱好!那么现在表结构如下:
[img][/img]
用FOR XML PATH将查询结果以XML输出
这时,我们的要求是查询学生表,显示所有学生的爱好的结果集,代码如下:
SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby FROM ( SELECT sName, (SELECT hobby+',' FROM student WHERE sName=A.sName FOR XML PATH('')) AS StuList FROM student A GROUP BY sName ) B
结果如下:
分析: 好的,那么我们来分析一下,首先看这句:
SELECT hobby+',' FROM student WHERE sName=A.sName FOR XML PATH('')
这句是通过FOR XML PATH 将某一姓名如张三的爱好,显示成格式为:“ 爱好1,爱好2,爱好3,”的格式!
那么接着看:
SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby FROM ( SELECT sName, (SELECT hobby+',' FROM student WHERE sName=A.sName FOR XML PATH('')) AS StuList FROM student A GROUP BY sName ) B
剩下的代码首先是将表分组,在执行FOR XML PATH 格式化,这时当还没有执行最外层的SELECT时查询出的结构为:
用FOR XML PATH将查询结果以XML输出
可以看到StuList列里面的数据都会多出一个逗号,这时随外层的语句:SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby 就是来去掉逗号,并赋予有意义的列明!
发表评论
-
转:避免全表扫描的sql优化
2015-02-05 16:37 1280http://tech.diannaodian.com/dw/ ... -
给表加上聚集索引和非聚集索引
2014-12-11 17:28 654创建简单非聚集索引 以下示例为 Purchasing.Pro ... -
查看表中索引语句
2014-12-11 10:37 642SELECT object_name(object_id) ... -
SQL2008一行转多行的精典写法
2013-08-28 12:06 383--创建测试表 create table t1( id ... -
在sql server中利用with as实现递归功能
2013-06-25 10:48 499在sqlserver2005之前,要实现递归功能比较麻烦,比如 ... -
SQL 2005 with(nolock)详解
2013-06-17 17:03 556大家在写查询时, ... -
用SQL语句查询每门成绩都大于80的学生姓名
2013-05-29 10:39 1682昨天遇到的一个SQL面试题,感觉很有趣。 表名stu 结构 ... -
SqlServer强制断开数据库已有连接的方法
2013-02-22 11:03 1596在master数据库中执行如下代码 declare @i IN ... -
Sql获取第一天、最后一天
2013-01-03 14:56 9608① 本月第一天(--减去今天再加上1天) SELECT DAT ... -
表函数与游标
2012-12-25 16:07 708--建立数据源 create table tb1(zm ch ... -
sql server 2005 输出表的函數用法
2012-12-25 16:02 803view sourceprint? 01 --sql ser ... -
SQL杂谈
2012-12-14 17:33 6741、如何用convert什么的把带有时分秒的日期转为时分秒都0 ... -
left join on and
2012-09-20 10:23 842数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临 ... -
筛选索引简单使用
2012-08-17 11:29 1113对于在强制实施数据完整性时的一种常见需求,也可以用筛选索引来解 ... -
排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句
2012-08-10 10:36 6588--在部门内新水排名(如果有相同名次,用dense_rank) ... -
SQL SERVER 中行列转换 PIVOT UNPIVO
2012-08-18 15:34 2291PIVOT用于将列值旋转为列名、同时执行聚合运算(即行转列), ... -
Apply简单使用举例
2012-08-09 17:20 982APPLY APPLY运算符把右表表达式应用左输入中 ... -
SQL Server 2008语句大全完整版
2012-08-09 10:39 1360--======================== ... -
Not Exists练习
2012-07-23 14:40 857IF OBJECT_ID(N'a') IS NOT NU ... -
Exists练习查找最小缺失值(Missing Value)
2012-07-17 09:34 952第一种方法 USE tempdb; GO IF OBJE ...
相关推荐
在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用示例。…………
XML Path Language xml语言
根据xmlPath路径,找到对应的xml文件,进行解析!之前找了好多感觉和自己的需求不太一样,这个可以根据Xpath解析出来xml里所有的信息,十分好用 举个例子 xmlPath = "E://upload/xml/1580242.163.xml"; XPathUtil util ...
将access数据库数据转换为xml文件
大家都知道在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用示例。
基本讲述了xml的基本的路径寻找规则。可以轻松的学到如何找到某个节点或者某些符合条件的节点。xml的寻址规则
将数据结果转换成xml的工具类。 1.结果数据格式 Map<Object, Object> map = new HashMap<Object, Object>(); List<Object> List = new ArrayList<Object>();// 创建一个容器 List.add...
1. VS2010的单元测试coverage文件无法通过命令行转换为xml文件。 2. 这里C#代码,读取coverage文件,然后转换为xml... xmlPath: the xml path for output. example: Coverage2xml e:\data.coverage e:\debug e:\xx.xml
由于ACCESS 没有oracle的listagg函数,也没有sql server这种 for xml path 这种, 要实现分组合并需要自定义一个函数,理解了 for xml path 这个就很好理解了。
/// string xmlPath = Server.MapPath("/EBDnsConfig/DnsConfig.xml"); //获取xml路径 /// DataSet ds = Serial.XmlObj.GetXml(xmlPath); //读取xml到DataSet中 /// </summary> /// <param name="XmlPath">...
使用5.0新特性animated-vector标签引用xml中的svg path元素
Resource resource = new ClassPathResource("license.xml"); BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream())); License license = new License(); license....
Effective and efficient management and manipulation of XML documents requires stable decisions at the time a document enters the XML DBMS to provide for storage structures which are adjusted to the ...
XML Path Language (XPath) 2.0标准 pdf 详细描述XPath2.0的全部语法,包括上下文无关文法的表达式,及详细说明 做语法分析绝对少不了
The SGML migration path eventually changed to an XML migration path as XML acceptance grew. Though that goal has not yet been achieved (he is still working on it), Fred has substantially changed ...
/// 将xml对象转化成DataTable /// /// <returns></returns> public DataTable CoverToTable() { if (this._xmlDocumentdoc != null) { DataSet dsxml = null; using (XmlReader reader = new ...
Part I establishes basic concepts, starting with schemas, tree automata and pattern matching, and concluding with static typechecking for XML as a highlight of the book. In Part II, the author turns ...
XML路径事件API是一个以C#/。NET为重点的编程接口,它允许以流式(类似SAX)的方式对XML文档进行XPath样式处理。
using System.Xml; //初始化一个xml实例 XmlDocument xml=new XmlDocument(); //导入指定xml文件 xml.Load(path); xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml")); 。。。