`
Felix韩
  • 浏览: 17136 次
  • 性别: Icon_minigender_1
  • 来自: 江西
最近访客 更多访客>>
社区版块
存档分类
最新评论

SQL查询 FOR XML [RAW|AUTO|EXPLICIT]

    博客分类:
  • SQL
阅读更多

FOR XML 子句的基本语法
在FOR子句中指定XML模式的基本语法为:
FOR XML mode [, XMLDATA] [, ELEMENTS][, BINARY BASE64]

参数
XML mode
指定XML模式。XML模式决定所得到的XML的形式。
mode可以是RAW、AUTO或EXPLICIT。

XMLDATA
指定应返回XML-Data架构。文档的架构被预先设计为内嵌式架构。

ELEMENTS
如果指定ELEMENTS选项,则列作为子元素返回。否则,列将映射到XML特性。只有在AUTO模式下才支持该选项。

BINARY BASE64
如果指定 BINARY Base64 选项,则查询所返回的任何二进制数据都用 base64 编码格式表示。使用RAW和EXPLICIT模式检索二进制数据时,必须指定该选项。在AUTO模式中,默认情况下将二进制数据作为引用返回。

 ===========================================

1.FOR XML RAW
2.FOR XML AUTO
3.FOR XML EXPLICIT
4.更改显示Tag为中文
5.同表 多层
6.异表 多层
7.处理数据及日期等的Null值
==================
数据库Person表中的数据为
personName personAge  
lisi                    30 
zhangsan        30 

1. ----------[ RAW ]---------
SELECT [personName], [personAge]
FROM [TestDB].[dbo].[person]
FOR XML RAW

结果:
<row personName="lisi      " personAge="30"/>
<row personName="zhangsan  " personAge="30"/>

2.----------[ AUTO ]--------
SELECT [personName], [personAge]
FROM [TestDB].[dbo].[person]
FOR XML AUTO

结果:
<TestDB.dbo.person personName="lisi      " personAge="30"/>
<TestDB.dbo.person personName="zhangsan  " personAge="30"/>


3.-----------[ EXPLICIT ]--------
select 1 as Tag ,null as parent
,RTRIM(personName) as [PersonBasic!1!personName]
,RTRIM(personAge) as [PersonBasic!1!personAge!xml]
FROM [TestDB].[dbo].[person]
FOR XML EXPLICIT

结果:

<PersonBasic personName="lisi">
   <personAge>30</personAge>
</PersonBasic>
<PersonBasic personName="zhangsan">
   <personAge>30</personAge>
</PersonBasic>

4.----- 更改显示Tag为中文 -----
select
1 as tag,
null as parent,
personName  as [人员!1!姓名!xml],
personAge  as [人员!1!年龄!xml]
from person
for xml EXPLICIT

结果:

<人员>
<姓名>lisi      </姓名>
<年龄>30</年龄>
</人员>
<人员>
<姓名>zhangsan  </姓名>
<年龄>30</年龄>
</人员>

5. ----- 同表 多层 ----
select
1 as tag,
null as parent,
rtrim(A.personName)   as [人员!1!姓名],
null as [人员信息!2!年龄!xml]
from person A

union all

select
2 as tag,
1 as parent,
rtrim(A.personName),
B.personAge
from person B,person A
where A.personName=B.personName

order by [人员!1!姓名],tag

for xml EXPLICIT

结果:

<人员 姓名="lisi">
     <人员信息>
         <年龄>30</年龄>
     </人员信息>
</人员>
<人员 姓名="zhangsan">
     <人员信息>
         <年龄>30</年龄>
     </人员信息>
</人员>

6.-------- 异表 多层 -------
select
1 as tag,
null as parent,
rtrim(A.personName)   as [人员!1!姓名],
null as [人员信息!2!年龄!xml],
null as [人员信息!2!职业!xml]
from person A

union all

select
2 as tag,
1 as parent,
rtrim(A.personName),
B.personAge,
rtrim(B.personJob)
from personInfo B,person A
where B.personName=A.personName
order by [人员!1!姓名],tag
for xml EXPLICIT

结果:

<人员 姓名="lisi">
     <人员信息>
         <年龄>30</年龄>
         <职业>teacher</职业>
     </人员信息>
</人员>
<人员 姓名="zhangsan">
      <人员信息>
          <年龄>30</年龄>
          <职业>worker</职业>
      </人员信息>
</人员>

7.-------处理数据及日期等的Null值-------
数据库Person表中的数据为
personName personAge   personBirth(可为空)
lisi                     30     1987-06-06
zhangsan        30     

当数据表中的字段为Null值时
产生的xml文档中 将没有该节点
为了解决这一问题
在必要的时候 可以将数字及日期类型
转换为字符串类型
这样就可以接收空串
(但不知实际运用中效果如何)

SELECT
1 as TAG,
null as parent,
RTRIM(personName)  AS [人员!1!姓名!xml],
RTRIM(ISNULL(CONVERT(CHAR,personAge),''))  AS [人员!1!年龄!xml],
RTRIM(ISNULL(CONVERT(CHAR(10),personBirth,120),'')) AS [人员!1!出生日期!xml]
FROM person
FOR XML EXPLICIT

结果:

<人员>
   <姓名>lisi</姓名>
   <年龄>30</年龄>
   <出生日期>1987-06-06</出生日期>
</人员>
<人员>
   <姓名>zhangsan</姓名>
   <年龄></年龄>
   <出生日期></出生日期>
</人员>

 

转自:http://www.cnblogs.com/freeliver54/archive/2007/03/22/683563.html

 

====================================

以通用数据库Northwind为例,下列T-SQL语句可以用XML格式输出Categories中的ID和Name列表,并为其加上根节点ROOT:

select top 1
1 as Tag,
NULL as Parent,
NULL as [ROOT!1],
CategoryID as [categories!2!CategoryID],
CategoryName as [categories!2!CategoryName]
FROM categories
UNION ALL
select
2,
1,
NULL,
CategoryID,
CategoryName
From Categories
FOR XML EXPLICIT

输出结果:
<ROOT>
   <categories CategoryID="1" CategoryName="Beverages"/>
   <categories CategoryID="2" CategoryName="Condiments"/>
   <categories CategoryID="3" CategoryName="Confections"/>
   <categories CategoryID="4" CategoryName="Dairy Products"/>
   <categories CategoryID="5" CategoryName="Grains/Cereals"/>
   <categories CategoryID="6" CategoryName="Meat/Poultry"/>
   <categories CategoryID="7" CategoryName="Produce"/>
   <categories CategoryID="8" CategoryName="Seafood"/>
</ROOT>

<script type="text/javascript"></script>

分享到:
评论

相关推荐

    FOR XML子句在SQL Server中的用法比较.pdf

    本篇文章主要介绍了SQL Server中FOR XML子句的四种不同用法:AUTO、RAW、EXPLICIT和PATH,并且通过实例对每种方式进行了分析比较。 1. RAW方式 RAW方式是将查询结果集中的每一行数据转换成一个XML元素的过程,它是...

    sqlserver to XML

    你可以使用FOR XML RAW、FOR XML AUTO、FOR XML PATH和FOR XML EXPLICIT四种模式来生成XML。 2. OPENXML函数:用于解析XML文档并创建一个虚拟表,使得可以像处理普通表格一样处理XML数据。 3. sp_xml_...

    EXPLICIT模式在Transact-SQL中检索XML数据的应用.pdf

    标题所提及的"EXPLICIT模式在Transact-SQL中检索XML数据的应用"是关于如何在SQL Server 2000中利用Transact-SQL的FOR XML子句以EXPLICIT模式查询XML数据的主题。Transact-SQL是非过程化的SQL语言扩展,广泛应用于...

    SQL语言参考大全(CHM)

    [ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT } [ , XMLDATA ] [ , ELEMENTS ] [ , BINARY BASE64 ] } ] 参数 BROWSE 指定当查看 DB-Library 浏览模式游标中的数据时允许更新。如果表包含时间戳列(用 ...

    sql 操作xml

    SQL Server提供了一种强大的工具,即FOR XML子句,用于将查询结果转换为XML格式。这个功能使得数据库中的数据能够方便地与其他XML兼容的应用程序进行交互。 FOR XML子句有四种基本模式: 1. AUTO模式: AUTO模式...

    如何用SQL数据支持XML.doc

    描述中提到,SQL Server支持XML的方式包括其自身功能和SQLXML扩展。SQL Server的内建XML功能允许用户通过HTTP访问、模板查询、FOR XML子句和OPENXML()函数来操作XML数据。这些功能提高了数据处理的效率和灵活性,...

    在Delphi中使用SQL Server的XML特性(一)——特性简介.pdf

    其中,Mode参数指定了结果XML文档的形式,可以是RAW、AUTO或EXPLICIT三者之一。RAW模式返回XML文档,每一行数据都用普通的元素封装,每一列都映射为该元素的一个属性,属性名和列名相同。 例如,以下查询语句可以...

    在Transact-SQL中检索XML数据的应用.pdf

    3. EXPLICIT模式:EXPLICIT模式需要显式地指定额外的信息来确定XML元素的父子关系,这要求开发者编写特定的SQL查询。开发者需要提供额外的列来定义元素和父元素的标记号,以构建期望的XML层次结构。 使用FOR XML...

    在Delphi中使用SQL Server的XML特性(三)——两种新模式以及XML模板.pdf

    在Delphi中使用SQL Server的XML特性有很多种方式,例如使用AUTO mode、RAW mode和EXPLICIT mode等。每种方式都有其特点和优缺,具体选择哪种方式取决于实际情况。 在 AUTO mode 中,SQL Server会自动将数据转换为...

    SQL数据支持XML技术.pdf

    FOR XML子句有三种模式:RAW、AUTO和EXPLICIT。 1. RAW模式:在这种模式下,每个记录被看作一个普通的行元素,并包含在一个(row/)标签中,每个列的值作为属性返回。 2. AUTO模式:这种模式使用数据库的表格名作为...

    SQL Server2000对XML的支持.pdf

    FOR XML提供了三种模式:RAW、AUTO和EXPLICIT。RAW模式将每条记录转换为XML文档的一个元素,列名作为属性名;AUTO模式通过嵌套的XML元素来表现数据的结构,根据SQL查询中表的顺序和位置自动嵌套子元素;而EXPLICIT...

    高级SQL.Server.2005.XML

    FOR XML有四种模式:RAW、AUTO、EXPLICIT和WITH XMLNAMESPACES,每种模式都有其特定的应用场景和优势。 SQL Server 2005还引入了XML数据的函数和方法,如SELECT ... FROM ... CROSS APPLY xml_column.nodes(),这个...

    XML和SQL Server 2000数据交换的实现.pdf

    FOR XML子句提供三种模式:RAW、AUTO、EXPLICIT,这些模式分别对应不同的XML输出样式。 - RAW模式将每条记录都包含在标签中,每个字段作为元素的属性。 - AUTO模式是FOR XML的默认模式,它根据SQL查询的结构自动...

    浅析SQL Server数据库操作XML的基本方法.pdf

    FORXML子句有多种模式,包括RAW、AUTO和EXPLICIT。RAW模式提供了一种最基本的格式,几乎未经格式化,每个数据表的行都以元素的形式呈现。AUTO模式则提供了额外的格式化选项,使得XML输出更加直观。EXPLICIT模式则...

    SQL 2000数据库与XML间数据传递的实现.pdf

    RAW模式用于返回简单的行集,AUTO模式根据SQL查询返回结构化的XML,而EXPLICIT模式则允许用户通过明确指定的格式来构建XML。 文章还指出,XML与HTML的最大区别在于XML丰富的结构和语义,HTML主要针对表现形式。XML...

    综述SQL Server数据库管理系统对XML的支持.pdf

    FORXML支持三种模式:Raw模式、Auto模式和Explicit模式,这三种模式各自提供了不同的方法来控制XML文档的格式。除了FORXML,SQL Server 2000还引入了OPENXML Transact-SQL关键字,允许开发人员将XML数据以行集的形式...

    SQL Server 2000中生成XML的小技巧

    在SQL Server 2000中生成XML,主要依赖于`FOR XML`子句,这是一个强大的功能,允许用户将SQL查询结果转换为XML格式。这个特性极大地提升了数据交换的效率,尤其是在开发Web服务或集成不同系统时。以下是一些关于如何...

    基于SQL SERVER2000的XML数据挖掘应用.pdf

    该命令能够让查询结果以XML格式展现,并且FORXML支持RAW、AUTO和EXPLICIT三种模式。RAW模式会将每一个记录包含在一个唯一的元素中,生成的文档结构可能与期望的不符,用途也相对有限。AUTO模式则更接近于期望的结构...

    XML与SQL Server双向数据转换接口的设计.pdf

    其中,FOR XML用于将SQL查询结果输出为XML格式的数据,它支持RAW、AUTO和EXPLICIT三种模式,分别用于不同的应用需求。而OPENXML则用于将XML文档中的数据读取出来并存入数据库中,其执行过程中需要调用系统存储过程,...

Global site tag (gtag.js) - Google Analytics