您的位置:首页 > 数据库

SQL Server XML基础学习<2>之--FOR XML AUTO/RAW

2012-11-06 18:09 176 查看
本文主要介绍FOR XML 的 AUTO 模式和 RAW 模式

--AUTO 模式将查询结果以嵌套 XML 元素的方式返回。这不能较好地控制从查询结果生成的 XML 的形式。

--如果要生成简单的层次结构,AUTO 模式查询很有用。

--但是,使用 EXPLICIT 模式和使用 PATH 模式在确定从查询结果生成的 XML 的形式方面可提供更好的控制和更大的灵活性。

--> 测试数据:#tb

IF OBJECT_ID('TEMPDB.DBO.#tb') IS NOT NULL

DROP TABLE #tb

GO

CREATE TABLE #tb

(

[id] INT IDENTITY PRIMARY KEY ,

[name] VARCHAR(4),

[type] VARCHAR(10)

)

INSERT #tb

SELECT '彪' , '流氓'

UNION ALL

SELECT '阿紫' , '流氓'

UNION ALL

SELECT '小强' , '流氓'

UNION ALL

SELECT '光辉' , '臭流氓'

UNION ALL

SELECT '小D' , '臭流氓'

UNION ALL

SELECT '野子' , '臭流氓'

--------------开始查询--------------------------

SELECT * FROM #tb FOR XML AUTO

/*

<_x0023_tb id="1" name="彪" type="流氓" />

<_x0023_tb id="2" name="阿紫" type="流氓" />

<_x0023_tb id="3" name="小强" type="流氓" />

<_x0023_tb id="4" name="光辉" type="臭流氓" />

<_x0023_tb id="5" name="小D" type="臭流氓" />

<_x0023_tb id="6" name="野子" type="臭流氓" />

*/

--ELEMENTS 选项,将返回以元素为中心的 XML。

SELECT * FROM #tb FOR XML AUTO,ELEMENTS

/*

<_x0023_tb>

<id>1</id>

<name>彪</name>

<type>流氓</type>

</_x0023_tb>

<_x0023_tb>

<id>2</id>

<name>阿紫</name>

<type>流氓</type>

</_x0023_tb>

<_x0023_tb>

<id>3</id>

<name>小强</name>

<type>流氓</type>

</_x0023_tb>

<_x0023_tb>

<id>4</id>

<name>光辉</name>

<type>臭流氓</type>

</_x0023_tb>

<_x0023_tb>

<id>5</id>

<name>小D</name>

<type>臭流氓</type>

</_x0023_tb>

<_x0023_tb>

<id>6</id>

<name>野子</name>

<type>臭流氓</type>

</_x0023_tb>

*/

=

--RAW 模式将查询结果集中的每一行转换为带有通用标识符 <row> 或可能提供元素名称的 XML 元素。

--默认情况下,行集中非 NULL 的每列值都将映射为 <row> 元素的一个属性。

--如果将 ELEMENTS 指令添加到 FOR XML 子句,则每个列值都将映射到 <row> 元素的子元素。

--指定 ELEMENTS 指令之后,您还可以选择性地指定 XSINIL 选项以将结果集中的 NULL 列值映射到具有 xsi:nil="true" 属性的元素。

SELECT * FROM #tb FOR XML RAW

/*

<row id="1" name="彪" type="流氓" />

<row id="2" name="阿紫" type="流氓" />

<row id="3" name="小强" type="流氓" />

<row id="4" name="光辉" type="臭流氓" />

<row id="5" name="小D" type="臭流氓" />

<row id="6" name="野子" type="臭流氓" />

*/

--使用 XMLDATA 和 XMLSCHEMA 选项作为结果请求架构

SELECT * FROM #tb FOR XML RAW, XMLDATA ;

--检索二进制数据

DECLARE @a VARBINARY(10)=0x78786F6F

SELECT @a AS 'VARBINARY' FOR XML RAW,BINARY BASE64

--结果为base64 编码的二进制数据

/*

XML_F52E2B61-18A1-11d1-B105-00805F49916B

<row VARBINARY="eHhvbw=="/>

*/

--对于结果集中的每一行,RAW 模式都生成一个元素 <row>。

--您可以通过向 RAW 模式指定一个可选参数为该元素指定另一个名称,如该查询中所示。

SELECT * FROM #tb FOR XML RAW('流氓们')

--AUTO 模式和 RAW 模式都可以使用 ROOT , ELEMENTS XSINIL, TYPE 指令,这里就不一一列举了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: