sql xml操作

 

一.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 行受影响)

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页