一.for xml 操作
1.for xml auto:每一行返回一个以表名为元素名,列名为属性的元素;
2.for xml raw:每一行返回一个以row为元素名,列名为属性的素;
3.for xml path:每一行返回一个指定的元素名,列名为子元素,列值为元素值;
4.for xml explicit:每一行返回行集转换为XML文档,行集必须具有特定的格式,可以返回多层;
5.事例:
declare @t table (分类编号 nvarchar(10),分类名称 nvarchar(10),级次 int)
insert into @t select 'A','A类',1
union all select 'A1','A1类',2
union all select 'A11','A11类',3
union all select 'A2','A2类',2
union all select 'B','B类',1
---for xml auto
select * from @t for xml auto
--for xml raw
select * from @t for xml raw
--for xml path
select * from @t for xml path('C')
--for xml explicit
select 1 as tag,null parent,
分类名称 as [C!1!分类名称!xml],
级次 as [C!1!级次]
from @t for xml explicit
------1
<_x0040_t 分类编号="A" 分类名称="A类" 级次="1" />
<_x0040_t 分类编号="A1" 分类名称="A1类" 级次="2" />
<_x0040_t 分类编号="A11" 分类名称="A11类" 级次="3" />
<_x0040_t 分类编号="A2" 分类名称="A2类" 级次="2" />
<_x0040_t 分类编号="B" 分类名称="B类" 级次="1" />
------2
<row 分类编号="A" 分类名称="A类" 级次="1" />
<row 分类编号="A1" 分类名称="A1类" 级次="2" />
<row 分类编号="A11" 分类名称="A11类" 级次="3" />
<row 分类编号="A2" 分类名称="A2类" 级次="2" />
<row 分类编号="B" 分类名称="B类" 级次="1" />
-----3
<C>
<分类编号>A</分类编号>
<分类名称>A类</分类名称>
<级次>1</级次>
</C>
<C>
<分类编号>A1</分类编号>
<分类名称>A1类</分类名称>
<级次>2</级次>
</C>
<C>
<分类编号>A11</分类编号>
<分类名称>A11类</分类名称>
<级次>3</级次>
</C>
<C>
<分类编号>A2</分类编号>
<分类名称>A2类</分类名称>
<级次>2</级次>
</C>
<C>
<分类编号>B</分类编号>
<分类名称>B类</分类名称>
<级次>1</级次>
</C>
-----4
<C 级次="1">
<分类名称>A类</分类名称>
</C>
<C 级次="2">
<分类名称>A1类</分类名称>
</C>
<C 级次="3">
<分类名称>A11类</分类名称>
</C>
<C 级次="2">
<分类名称>A2类</分类名称>
</C>
<C 级次="1">
<分类名称>B类</分类名称>
</C>
二.xml 查询操作
1.query 查询得到的是带有标签的数据;
2.value 查询得到的是标签的内容;
例:
declare @x xml
set @x='<book id="0001">
<title>C Program</title>
<author>David</author>
<price>21</price>
</book>'
select @x.query('book/title')
select @x.value('(book/author)[1]','nvarchar(10)')
-----
<title>C Program</title>
David
3.nodes
语法:nodes (XQuery) as Table(Column)
xquery:字符串,table(column):返回的表名和列名
declare @x xml
set @x='<book id="0001">
<title>C Program</title>
<author>David</author>
<price>21</price>
</book>'
select t.a.value('(.)[1]','nvarchar(100)') from @x.nodes('//book') T(a)
--------
C ProgramDavid21
(1 行受影响)