本文主要介绍for xml 的auto 模式和 raw 模式 --auto 模式将查询结果以嵌套 xml 元素的方式返回。这不能较好地控制从查询结果生成的 xml 的形式。 --如果要生成简单的层次结构,auto 模式查询很有用。 --但是,使用 explicit 模式和使用 path 模式在确定从查
本文主要介绍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
/*
*/
--elements 选项,将返回以元素为中心的 xml。
select * from #tb for xml auto,elements
/*
1
彪
流氓
2
阿紫
流氓
3
小强
流氓
4
光辉
臭流氓
5
小d
臭流氓
6
野子
臭流氓
*/
=
--raw 模式将查询结果集中的每一行转换为带有通用标识符 或可能提供元素名称的 xml 元素。
--默认情况下,行集中非 null 的每列值都将映射为 元素的一个属性。
--如果将 elements 指令添加到 for xml 子句,则每个列值都将映射到 元素的子元素。
--指定 elements 指令之后,您还可以选择性地指定 xsinil 选项以将结果集中的 null 列值映射到具有 xsi:nil=true 属性的元素。
select * from #tb for xml raw
/*
*/
--使用 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
*/
--对于结果集中的每一行,raw 模式都生成一个元素 。
--您可以通过向 raw 模式指定一个可选参数为该元素指定另一个名称,如该查询中所示。
select * from #tb for xml raw('流氓们')
--auto 模式和 raw 模式都可以使用 root , elements xsinil, type 指令,这里就不一一列举了