SQl 2005 For XMl 简单查询(Raw,Auto,Path模式)(1)
很多人对Xpath可能比较熟悉,但不知道有没有直接操作过数据库,我们都知道 在Sql2005里公支持的几种查询有Raw,Auto模式,页并没有Path和Elements用法等,如果在2000里使用过 Raw模式的朋友应该知道,是不容易处理查询结果的,那么在2005里对这一块做了很好的提升
我先来介绍一下什么是Sql For Xml吧,我们大多时候都会有这种情况,想把表里的数据转化成Xml格式的,通常我们会使用c#或是Vb程序来转 公,使用Xpath或是XmlDocument等对象来完成,当然这样是可以的,不过这样处理起来就会出现很多问题,比如说数据库变化,如果只有数据变化 那方便,写一个通用的类,每次查询前更新Xml文件就可以了,但如果出现数据库结构的变化就会很吃力了,那么有没有一种方法,把数据在调出数据库之前就转 化为Xml的呢,这个是当然的,就是我们的For Xml,大家在查询分析器里做表结果查询的时候一般是这样写的
我们给大家展示一下我所用到的两个表吧
第一个表班级信息表ClassInfo(班级信息表一共三个字段CID 本表ID,Cnumber 班级人数,CName 班级名称)

第二个表 生信息表 Students (CID 班级表外键,SID学生信息表ID学生的学号就是,SName)

SELECT CID,Cnumber,CName FROM ClassInfo WHERE CName='博客园一班'
结果为:

通常是这种方法,或是再加上个Order BY 什么的,或是像inner join 等查询的东东,其实我们只要在这条语句上少量的改动一下就可以得到我们想要的Xml数据了,也许 有朋友已经想到了是 For Xml 对就是这样的
SELECT CID,Cnumber,CName FROM ClassInfo WHERE CName='博客园一班' FOR xml raw
这样查询得到的结果如下:

我们如果想看的更清楚的话只要单击一个就可以得到相应的Xml文件的形式了

这里应该就是我们想要的Xml文件的形式了,其实就是这么简单的,我们可以通过Ado的方式 把他查询得到UI直接使用就OK了,
我们可以看到我们得到的信息并不完整,没有学生信息,我们要吧使用一个连接的形式来完成看下面的Sql语句
SELECT ClassInfo.CID,ClassInfo.Cnumber,ClassInfo.CName,Students.SID,Students.SName
FROM ClassInfo JOIN dbo.Students ON Students.CID=dbo.ClassInfo.CID
ORDER BY CID FOR xml raw
这里我们是查询所有的学生和所在班级的信息
结果为:

raw 的形式是以属性的方法来显示字段的,我们还可以使用Auto,Auto是自动 ,它的意思 不用我多说看例子,(字体检查相关项目)
我们把上面的代码修改一下
SELECT ClassInfo.CID,ClassInfo.Cnumber,ClassInfo.CName,Students.SID,Students.SName
FROM ClassInfo JOIN dbo.Students ON Students.CID=dbo.ClassInfo.CID
ORDER BY CID FOR xml auto
这样就能得到更为合理的数据,返回的结果如下
<ClassInfo CID="1" Cnumber="100" CName="博客园一班">
<dbo.Students SID="1" SName="苏飞" />
<dbo.Students SID="2" SName="金色海洋" />
</ClassInfo>
<ClassInfo CID="2" Cnumber="10" CName="博客园二班">
<dbo.Students SID="3" SName="赵劼" />
<dbo.Students SID="4" SName="DUDU" />
</ClassInfo>
<ClassInfo CID="3" Cnumber="5" CName="博客园二班">
<dbo.Students SID="5" SName="李永京" />
</ClassInfo>
我们可以看到这里没有根结点,当然我们要吧通过Root属性来完成
修改Sql语句
SELECT ClassInfo.CID,ClassInfo.Cnumber,ClassInfo.CName,Students.SID,Students.SName
FROM ClassInfo JOIN dbo.Students ON Students.CID=dbo.ClassInfo.CID
ORDER BY CID FOR xml auto ,root('studentInfo')
返回结果
<studentInfo>
<ClassInfo CID="1" Cnumber="100" CName="博客园一班">
<dbo.Students SID="1" SName="苏飞" />
<dbo.Students SID="2" SName="金色海洋" />
</ClassInfo>
<ClassInfo CID="2" Cnumber="10" CName="博客园二班">
<dbo.Students SID="3" SName="赵劼" />
<dbo.Students SID="4" SName="DUDU" />
</ClassInfo>
<ClassInfo CID="3" Cnumber="5" CName="博客园二班">
<dbo.Students SID="5" SName="李永京" />
</ClassInfo>
</studentInfo>
我们发现和我们平时常的Xml文档的格式还是不一样,我们再加上一个Elements属性试试
SELECT ClassInfo.CID,ClassInfo.Cnumber,ClassInfo.CName,Students.SID,Students.SName
FROM ClassInfo JOIN dbo.Students ON Students.CID=dbo.ClassInfo.CID
ORDER BY CID FOR xml auto ,root('studentInfo'),Elements
返回的结果如下
<studentInfo>
<ClassInfo>
<CID></CID>
<Cnumber></Cnumber>
<CName>博客园一班</CName>
<dbo.Students>
<SID></SID>
<SName>苏飞</SName>
</dbo.Students>
<dbo.Students>
<SID></SID>
<SName>金色海洋</SName>
</dbo.Students>
</ClassInfo>
<ClassInfo>
<CID></CID>
<Cnumber></Cnumber>
<CName>博客园二班</CName>
<dbo.Students>
<SID></SID>
<SName>赵劼</SName>
</dbo.Students>
<dbo.Students>
<SID></SID>
<SName>DUDU</SName>
</dbo.Students>
</ClassInfo>
<ClassInfo>
<CID></CID>
<Cnumber></Cnumber>
<CName>博客园二班</CName>
<dbo.Students>
<SID></SID>
<SName>李永京</SName>
</dbo.Students>
</ClassInfo>
</studentInfo>
基本是我们想要的数据了吧,我们还可以使用这样两个语句来完成,我们前面提到过Path 和Raw,其它在这里只要换成其中的一个就行结果是一样的
我们可看一下修改后的代码
SELECT ClassInfo.CID,ClassInfo.Cnumber,ClassInfo.CName,Students.SID,Students.SName
FROM ClassInfo JOIN dbo.Students ON Students.CID=dbo.ClassInfo.CID
ORDER BY CID FOR xml raw ,root('studentInfo'),Elements
看结果吧
<studentInfo>
<row>
<CID></CID>
<Cnumber></Cnumber>
<CName>博客园一班</CName>
<SID></SID>
<SName>苏飞</SName>
</row>
<row>
<CID></CID>
<Cnumber></Cnumber>
<CName>博客园一班</CName>
<SID></SID>
<SName>金色海洋</SName>
</row>
<row>
<CID></CID>
<Cnumber></Cnumber>
<CName>博客园二班</CName>
<SID></SID>
<SName>赵劼</SName>
</row>
<row>
<CID></CID>
<Cnumber></Cnumber>
<CName>博客园二班</CName>
<SID></SID>
<SName>DUDU</SName>
</row>
<row>
<CID></CID>
<Cnumber></Cnumber>
<CName>博客园二班</CName>
<SID></SID>
<SName>李永京</SName>
</row>
</studentInfo>
我相信这样的数据我们查询和处理起来就方便多了,
如果大家想要这样的数据其实要吧直接使用Path模式,这样会更方法
看代码
SELECT ClassInfo.CID,ClassInfo.Cnumber,ClassInfo.CName,Students.SID,Students.SName
FROM ClassInfo JOIN dbo.Students ON Students.CID=dbo.ClassInfo.CID
ORDER BY CID FOR xml path ,root('studentInfo')
结果和上面的是完全一样的,也就是说这里不用再加上Elements属性也是一样的,也是我们最常用的一种方式
结果就不再贴了,相信简单的知道 这些以后已经能帮助不少对这块不怎么理解的朋友解决一部分问题了,因为基本的查询也就是这么多,我们在使用的时候只要返回结果集的第一行第一列就行了,然后怎么处理就是c#代码怎么处理Xml文档的问题了,
总结一下这几个东东吧,
Path 是以数据基本结构也就是以字段为结点的形式返回Xml文档(这样说不专业可能容易理解)
Raw 是把数据里所有的字段以属性的方式显示出Xml文档
Auto 自动关连到相应的项目,和Raw一样在不加Elements属性时以这种方式返回数据
建议大家做几个测试共没有几行代码,多动手才能真正体会它有做用
这些应该是入门级的,下节我希望能给大家介绍一下更深一点的东东,记得动手调试,,,,,,,,,,,,,,,,,,,,,,,,,,
本文来自于http://www.cnblogs.com/sufei/archive/2010/04/24/1719037.html
SQl 2005 For XMl 简单查询(Raw,Auto,Path模式)(1)的更多相关文章
- SQL中的SELECT_简单查询语句总结
--以scott用户下的dept和emp表为例 --注意:如果scott用户不能使用,请使用system用户登录--解锁scott用户ALTER USER SCOTT ACCOUNT UNLOCK;- ...
- 【串线篇】SQL映射文件select简单查询标签
一.参数(Parameters)传递 单个参数 基本类型:取值#{hahaha}随便写 多个参数 <!-- public Employee getEmpById(Integer id,Str ...
- SQL Server 输出 XML
一.概述 SELECT 查询将结果作为行集返回.在 SQL 查询中指定 FOR XML 子句,从而将该查询的正式结果作为 XML 来检索.FOR XML 子句可以用在顶级查询和子查询中.顶级 FOR ...
- Sql Server 之 for xml (path,raw,auto,root)
1.for xml path('str') select ID,CreateTime from dbo.ArticleInfo for xml Path('mytitle') 结果:(注意:如果是s ...
- Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 1 -使用FOR XML返回XML结果集
XML 介绍 <CustomersOrders> <Customer custid="1" companyname="Customer NRZBB&qu ...
- SQL SERVER中XML查询:FOR XML指定PATH
SQL SERVER中XML查询:FOR XML指定PATH 前言 在SQL SERVER中,XML查询能够指定RAW,AUTO,EXPLICIT,PATH.本文用一些实例介绍SQL SERVER中指 ...
- Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 2 -使用XQuery 查询XML数据
XQuery 是一个浏览/返回XML实例的标准语言. 它比老的只能简单处理节点的XPath表达式更丰富. 你可以同XPath一样使用.或是遍历所有节点,塑造XML实例的返回等. 作为一个查询语言, 你 ...
- SQL 2005 中查询或执行另外的数据库操作的方法
原文:SQL 2005 中查询或执行另外的数据库操作的方法 摘要: 如果,你想在一台数据库服务器上,查询另一个台数据服务器的数据该如何做呢?如果,你想在同一台数据服务器上,在不同的数据库之间查询数据, ...
- LINQ to Sql系列二 简单查询和联接查询
这一篇文章主要总结LINQ to sql的简单查询(单表查询)和联接查询(多表查询) 单表查询 需求是我们要输出TClass表中的结果.使用了from-in-select语句,代码如下: public ...
随机推荐
- HTML 内容居中方式总结
在HTML网页排版经常会用到关于对其方式的情况,水平居中和垂直居中.特别是水平居中,并不是一个简单的text-align就可以解决所有的情况. 开始之前普及一点HTML知识,目标很明显,不同的页面结构 ...
- JS心得——判断一个对象是否为空
判断一个对象是否为空对象,本文给出三种判断方法: 最常见的思路,for...in...遍历属性,为真则为"非空数组":否则为"空数组" 2.通过JSON自带的. ...
- svn post-commit 同步
@echo on SET REPOS=%1 SET USER=%2 SET SVN="D:\Program Files\VisualSVN Server\bin\svn.exe" ...
- php加密类
1.需求 了解php加密类的使用 2.例子 参考ci的3.1.2的新版加密类,一个不传参,用默认加密算法,加密模式的例子 //0.加载加密类 $this->load->library('e ...
- 委托、Lambda表达式和事件
1.1 引用方法 委托是寻址方法的 .NET 版本.委托是类型安全的类.它定义了返回类型和参数的类型.委托类不仅包含对方法的引用,也可以包含对多个方法的引用. Lambda 表达式 ...
- Markdown简单语法
Content 标题大小 斜体和加粗 分割线 有序列表和无序列表 链接 代码框 标题大小 在字体下方加上-和=分别表示一级标题和二级标题,例如: 一级标题 --- 二级标题 === 或者使用#的个数表 ...
- nginx配置为windows服务中的坑
网上搜索“nginx 配置为windows服务”,很容易搜索到使用windows server warpper来配置,于是按照网上的方法我从github上的链接下载了1.17版本,前面都很顺利,很容易 ...
- 《转载》Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
引言: 接上一篇文章,对@RequestMapping进行地址映射讲解之后,该篇主要讲解request 数据到handler method 参数数据的绑定所用到的注解和什么情形下使用: 简介: han ...
- 463. Island Perimeter
https://leetcode.com/problems/island-perimeter/ 在一个N×N的矩阵中,N<100,1代表岛,0代表海,岛内没有海,求岛的周长 [[0,1,0,0] ...
- java 持久框架mybatis的初步学习
什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索.MyBati ...