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>1</CID>
    <Cnumber>100</Cnumber>
    <CName>博客园一班</CName>
    <dbo.Students>
      <SID>1</SID>
      <SName>苏飞</SName>
    </dbo.Students>
    <dbo.Students>
      <SID>2</SID>
      <SName>金色海洋</SName>
    </dbo.Students>
  </ClassInfo>
  <ClassInfo>
    <CID>2</CID>
    <Cnumber>10</Cnumber>
    <CName>博客园二班</CName>
    <dbo.Students>
      <SID>3</SID>
      <SName>赵劼</SName>
    </dbo.Students>
    <dbo.Students>
      <SID>4</SID>
      <SName>DUDU</SName>
    </dbo.Students>
  </ClassInfo>
  <ClassInfo>
    <CID>3</CID>
    <Cnumber>5</Cnumber>
    <CName>博客园二班</CName>
    <dbo.Students>
      <SID>5</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>1</CID>
    <Cnumber>100</Cnumber>
    <CName>博客园一班</CName>
    <SID>1</SID>
    <SName>苏飞</SName>
  </row>
  <row>
    <CID>1</CID>
    <Cnumber>100</Cnumber>
    <CName>博客园一班</CName>
    <SID>2</SID>
    <SName>金色海洋</SName>
  </row>
  <row>
    <CID>2</CID>
    <Cnumber>10</Cnumber>
    <CName>博客园二班</CName>
    <SID>3</SID>
    <SName>赵劼</SName>
  </row>
  <row>
    <CID>2</CID>
    <Cnumber>10</Cnumber>
    <CName>博客园二班</CName>
    <SID>4</SID>
    <SName>DUDU</SName>
  </row>
  <row>
    <CID>3</CID>
    <Cnumber>5</Cnumber>
    <CName>博客园二班</CName>
    <SID>5</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

时间: 2024-10-28 10:18:52

SQl 2005 For XMl 简单查询(Raw,Auto,Path模式)(1)的相关文章

sql server 中的简单查询案例

/** 名称:人力资源管理系统数据库*/ /*切换到系统数据库master:*/USE master;GO /*若当前系统中存在HR表,则删除之:*/IF EXISTS (SELECT 1 FROM sysdatabases WHERE name = 'HR')BEGIN DROP DATABASE HR;ENDGO --创建数据库HRcreate database HRgo/*切换到HR数据库*/USE HR;GO----------------------------------------

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

1.for xml path('str') select ID,CreateTime  from dbo.ArticleInfo for xml Path('mytitle') 结果:(注意:如果是select ID,CreateTime from dbo.ArticleInfo for xml path下面的结果中<mytitle>就变为默认的<row>) <mytitle> <ID>4</ID> <CreateTime>2015-

SQL 2005 中的XML类型 .

SQL 2005 中的XML类型 . http://blog.csdn.net/sgear/article/details/7349657 SQL Server 2005的XmL数据类型之基础篇一.引言如今,在SQL Server 2005中,XML成为第一流的数据类型.借助于基于XML模式的强类型化支持和基于服务器端的XML数据校验功能,现在,开发者可以对存储的XML文档进行轻松的远程修改.作为数据库开发者,许多人都必须大量地涉及XML. 如今,在SQL Server 2005中,你能以一种新

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

原文:Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 1 -使用FOR XML返回XML结果集 XML 介绍 <CustomersOrders> <Customer custid="1" companyname="Customer NRZBB"> <Order orderid="10692" orderdate="2007-10-03T00:00:00&

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

SQL SERVER中XML查询:FOR XML指定PATH 前言 在SQL SERVER中,XML查询能够指定RAW,AUTO,EXPLICIT,PATH.本文用一些实例介绍SQL SERVER中指定PATH的XML查询. PATH參数 PATH('參数'),參数是用来重命名ROW的,ROW是默认生成的名称. select 'Hui' for xml path  结果:<row>Hui</row> select 'Hui' for xml path ('root') 结果:<

(转)SQL Server 2005的XML数据修改语言(XML DML) (转自MSDN)

SQL Server 2005的XML数据修改语言(XML DML) 发布日期: 2006-08-14 | 更新日期: 2006-08-14 作者:张洪举 Microsoft MVP 应用于:SQL Server 2005,XML 注:本文章中的内容需要相关的XML和XQuery知识 本页内容 1.insert 2.delete 3.replace 作为对XQuery语言的扩展,XML DML为XML数据操作提供了更大的灵活性,而不再仅仅是对XML数据进行一些查询操作.通过XML DML,用户可

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

原文:SQL 2005 中查询或执行另外的数据库操作的方法 摘要: 如果,你想在一台数据库服务器上,查询另一个台数据服务器的数据该如何做呢?如果,你想在同一台数据服务器上,在不同的数据库之间查询数据,又该怎么办呢? 1.Synonym 2.openquery 3.Linked Servers Server Object-->Linked Servers--> serverType 选择 SQL Server, 在 Security 中 选择"Be made using this se

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

原文:Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 2 -使用XQuery 查询XML数据 XQuery 是一个浏览/返回XML实例的标准语言. 它比老的只能简单处理节点的XPath表达式更丰富. 你可以同XPath一样使用.或是遍历所有节点,塑造XML实例的返回等. 作为一个查询语言, 你需要一个查询处理引擎. SQL Server 数据库通过XML数据类型方法的T-SQL 语句来处理XQuery. SQL Server 并不支持所有的X

010.简单查询、分组统计查询、多表连接查询(sql实例)

-------------------------------------day3------------ --添加多行数据:------INSERT [INTO] 表名 [(列的列表)] --SELECT UNION --SELECT 'HAHA',1,32--UNION ALL --全部显示/显示重复数据 即使集合相同--UNION---------将查询的两个结果集合并.结构必须一致 -->常见面试题 --SELECT 'HEHE',2,33------将查询结果添加到列表中(子查询)IN