很多人对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)的更多相关文章

  1. SQL中的SELECT_简单查询语句总结

    --以scott用户下的dept和emp表为例 --注意:如果scott用户不能使用,请使用system用户登录--解锁scott用户ALTER USER SCOTT ACCOUNT UNLOCK;- ...

  2. 【串线篇】SQL映射文件select简单查询标签

    一.参数(Parameters)传递 单个参数 基本类型:取值#{hahaha}随便写 多个参数 <!--   public Employee getEmpById(Integer id,Str ...

  3. SQL Server 输出 XML

    一.概述 SELECT 查询将结果作为行集返回.在 SQL 查询中指定 FOR XML 子句,从而将该查询的正式结果作为 XML 来检索.FOR XML 子句可以用在顶级查询和子查询中.顶级 FOR ...

  4. Sql Server 之 for xml (path,raw,auto,root)

    1.for xml path('str') select ID,CreateTime  from dbo.ArticleInfo for xml Path('mytitle') 结果:(注意:如果是s ...

  5. Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 1 -使用FOR XML返回XML结果集

    XML 介绍 <CustomersOrders> <Customer custid="1" companyname="Customer NRZBB&qu ...

  6. SQL SERVER中XML查询:FOR XML指定PATH

    SQL SERVER中XML查询:FOR XML指定PATH 前言 在SQL SERVER中,XML查询能够指定RAW,AUTO,EXPLICIT,PATH.本文用一些实例介绍SQL SERVER中指 ...

  7. Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 2 -使用XQuery 查询XML数据

    XQuery 是一个浏览/返回XML实例的标准语言. 它比老的只能简单处理节点的XPath表达式更丰富. 你可以同XPath一样使用.或是遍历所有节点,塑造XML实例的返回等. 作为一个查询语言, 你 ...

  8. SQL 2005 中查询或执行另外的数据库操作的方法

    原文:SQL 2005 中查询或执行另外的数据库操作的方法 摘要: 如果,你想在一台数据库服务器上,查询另一个台数据服务器的数据该如何做呢?如果,你想在同一台数据服务器上,在不同的数据库之间查询数据, ...

  9. LINQ to Sql系列二 简单查询和联接查询

    这一篇文章主要总结LINQ to sql的简单查询(单表查询)和联接查询(多表查询) 单表查询 需求是我们要输出TClass表中的结果.使用了from-in-select语句,代码如下: public ...

随机推荐

  1. mysql 中基础英语单词 (一)关于数据库创建与查找 (包括简写单词)

    create 创建             limit 限制        count  计算     rollup  几上归纳 drop   降下,撤销                       ...

  2. iOS音频解码表格

  3. word20161224

    V.34 V.90 validation / 验证 value entry / 值项 variable / 变量 variable bit rate, VBR / 可变传输率 VBR, variabl ...

  4. Swift3新特性汇总

    之前 Apple 在 WWDC 上已将 Swift 3 整合进了 Xcode 8 beta 中,而本月苹果发布了 Swift 3 的正式版.这也是自 2015 年底Apple开源Swift之后,首个发 ...

  5. windows server 2008 wamp安装报000F15A0解决方法

    wampserver2.2c-x64 原因:缺少Visual C++ 2008 Runtime x64,官网地址http://www.microsoft.com/zh-cn/download/deta ...

  6. 判断一个字符串str不为空的方法

    1.str == null; 2."".equals(str); 3.str.length 4.str.isEmpty(); 注意:length是属性,一般集合类对象拥有的属性,取 ...

  7. caffe机器学习自带图片分类器classify.py实现输出预测结果的概率及caffe的web_demo例子运行实例

    caffe机器学习环境搭建及python接口编译参见我的上一篇博客:机器学习caffe环境搭建--redhat7.1和caffe的python接口编译 1.运行caffe图片分类器python接口 还 ...

  8. MVC Code First 自动生成数据库

    1.新建一个MVC项目

  9. C++ 字符处理函数

    C/C++里有一个头文件#include <ctype.h>,里面定义了很多字符函数,在实际开发中,用起来很方面. int isalpha(int ch)  若ch是字母('A'-'Z', ...

  10. ASP.NET知识总结(9.使用Cookies实现购物车)

    ListInfo.aspx向购物车的添加商品的方法 private void GouWu(string name, double price, string id) { //往购物车中添加商品 Htt ...