本文从此而来
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 1322http://tech.diannaodian.com/dw/ ... -
给表加上聚集索引和非聚集索引
2014-12-11 17:28 700创建简单非聚集索引 以下示例为 Purchasing.Pro ... -
查看表中索引语句
2014-12-11 10:37 678SELECT object_name(object_id) ... -
SQL2008一行转多行的精典写法
2013-08-28 12:06 415--创建测试表 create table t1( id ... -
在sql server中利用with as实现递归功能
2013-06-25 10:48 532在sqlserver2005之前,要实现递归功能比较麻烦,比如 ... -
SQL 2005 with(nolock)详解
2013-06-17 17:03 583大家在写查询时, ... -
用SQL语句查询每门成绩都大于80的学生姓名
2013-05-29 10:39 1723昨天遇到的一个SQL面试题,感觉很有趣。 表名stu 结构 ... -
SqlServer强制断开数据库已有连接的方法
2013-02-22 11:03 1619在master数据库中执行如下代码 declare @i IN ... -
Sql获取第一天、最后一天
2013-01-03 14:56 9676① 本月第一天(--减去今天再加上1天) SELECT DAT ... -
表函数与游标
2012-12-25 16:07 743--建立数据源 create table tb1(zm ch ... -
sql server 2005 输出表的函數用法
2012-12-25 16:02 835view sourceprint? 01 --sql ser ... -
SQL杂谈
2012-12-14 17:33 7281、如何用convert什么的把带有时分秒的日期转为时分秒都0 ... -
left join on and
2012-09-20 10:23 886数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临 ... -
筛选索引简单使用
2012-08-17 11:29 1153对于在强制实施数据完整性时的一种常见需求,也可以用筛选索引来解 ... -
排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句
2012-08-10 10:36 6629--在部门内新水排名(如果有相同名次,用dense_rank) ... -
SQL SERVER 中行列转换 PIVOT UNPIVO
2012-08-18 15:34 2330PIVOT用于将列值旋转为列名、同时执行聚合运算(即行转列), ... -
Apply简单使用举例
2012-08-09 17:20 1027APPLY APPLY运算符把右表表达式应用左输入中 ... -
SQL Server 2008语句大全完整版
2012-08-09 10:39 1391--======================== ... -
Not Exists练习
2012-07-23 14:40 888IF OBJECT_ID(N'a') IS NOT NU ... -
Exists练习查找最小缺失值(Missing Value)
2012-07-17 09:34 996第一种方法 USE tempdb; GO IF OBJE ...
相关推荐
在数据库操作中,将查询结果转换为XML格式的需求十分常见。SQL Server 提供了多种方法来生成XML数据,其中`FOR XML PATH`是最常用的方法之一。通过使用`FOR XML PATH`语句,可以将SQL Server中的数据查询结果转换成...
通过这个语句,你可以将 SQL 查询结果转换成 XML 格式,便于数据交换、存储或者进一步处理。以下是对 `FOR XML PATH` 语句的详细解释和应用示例。 `FOR XML PATH` 的基本语法是: ```sql SELECT column_list FROM ...
首先,我们来看下`FOR XML PATH`函数的使用,这是在SQL Server中用来将查询结果输出为XML格式的一个重要工具。通过指定`PATH`子句,你可以控制输出的XML结构。如果省略`PATH`子句,那么输出的XML将是一个单节点,...
RAW方式是将查询结果集中的每一行数据转换成一个XML元素的过程,它是最基础也是最简单的转换方式。在RAW模式下,每行数据都会被映射为一个名为“row”的XML元素,并且非空的列值会被映射为该元素的属性值。这种方式...
`XMLTable`函数是Oracle提供的一种用于解析XML文档的方法,它可以将XML数据转换为关系表形式,便于使用SQL进行查询操作。在给定的例子中,使用了`XMLTable`函数来解析XML文档,并从中提取出所需的`id`和`name`字段...
- **导出XML**:在Access中,可以使用“导出”功能将表或查询的结果导出为XML文件。步骤包括打开Access数据库,选择要导出的表或查询,然后在“文件”菜单中选择“导出”,在导出向导中选择XML格式,设定导出选项,...
### XML Path 语法详解 #### 一、XML与XPath简介 XML(Extensible Markup Language)是一种标记语言,用于描述数据的格式。它采用一种自描述的方式定义数据结构,因此非常适合于存储和传输结构化数据。XPath是一种...
在深入探讨XML路径语言(XPath)之前,我们首先应明确,XPath是一种强大的查询语言,用于在XML文档中定位元素和属性。XPath由W3C(万维网联盟)推荐,并被设计为XSLT(XSL转换)和XPointer的一部分。它允许开发者...
根据xmlPath路径,找到对应的xml文件,进行解析!之前找了好多感觉和自己的需求不太一样,这个可以根据Xpath解析出来xml里所有的信息,十分好用 举个例子 xmlPath = "E://upload/xml/1580242.163.xml"; XPathUtil util ...
本教程将介绍如何使用Java读取和输出XML文件,主要涉及两个库:JDOM2和XStream。 首先,我们来了解一下JDOM2。JDOM2是一个针对Java平台的API,专门用来处理XML文档。它提供了方便的方法来创建、修改和读取XML文档。...
- **SAX(Simple API for XML)**:事件驱动的解析方式,适用于处理大型XML文档,因为它不将整个文档加载到内存中。 - **XSLT(Extensible Stylesheet Language Transformations)**:用于转换XML文档,将XML格式...
在本主题中,我们将深入探讨基于Xpath的XML文件查询和更新。 **Xpath基本概念** 1. **节点类型**:Xpath中的节点包括元素(element)、属性(attribute)、文本(text)、命名空间(namespace)、处理指令...
XPath 表达式查询结果是一个有序的节点标识符(ID)集合。Given an ID later, the application program can extract and retrieve related elements. Reconstruct 方式:这种方式结合了选择和抽取,可以从输入的 XML...
现在,我们将使用JSP来处理XML和XSLT的转换。在JSP中,我们可以使用`javax.xml.transform.Transformer` API来完成这一任务。以下是一个基本的JSP示例,展示了如何读取XML和XSLT文件并进行转换: ```jsp *, javax....
通过CSS,我们可以定义字体、颜色、布局等视觉元素,使得查询结果以用户友好的方式展现。同时,XSL(Extensible Stylesheet Language)可能被用来转换XML数据为HTML或其他格式,以便在网页上展示或者进行进一步处理...
它可以加载XML文件、创建新的XML文档、修改现有文档,并将其保存回磁盘或以字符串形式输出。以下是一些关于XMLDocument的基本操作: 1. **加载XML文件**:可以使用Load方法从文件或流加载XML文档。例如: ```csharp...
1. VS2010的单元测试coverage文件无法通过命令行转换为xml文件。 2. 这里C#代码,读取coverage文件,然后转换为xml... xmlPath: the xml path for output. example: Coverage2xml e:\data.coverage e:\debug e:\xx.xml
QT框架是广受欢迎的开源...不过,请注意,尽管TinyXML库简单易用,但它并不支持XPath查询和XML Schema验证,如果你的项目需要这些高级功能,可能需要考虑使用更强大的库,如Qt自带的QDomDocument或QtXmlPatterns模块。
4. **转换查询结果**:LINQ查询的结果通常是一个集合,你可以将其转换为其他类型,如`List<T>`。 ```csharp List<string> valuesList = filteredElements.Select(e => e.Value).ToList(); ``` **三、遍历查询...
为了将 SQL Server 2008 中的单个基本表数据导出为 XML 文档格式,可以使用带有 `FOR XML` 子句的 `SELECT` 查询语句。例如,假设有一个名为 `students` 的学生表,若想将此表中的数据导出为 XML 格式,可以使用以下...