Sql Server XML

实验数据:

Create table  xmldata
(name NVARCHAR(20),
 age int,
 sex NVARCHAR(5)
)

INSERT INTO  xmldata VALUES (N'张三',12,N'男'),
(N'李四',12,N'女'),
(N'王五',12,N'男')

SELECT * FROM xmldata

 表数据转换XML

FOR XML PATH
--把表数据转换成XML数据


--将数据存入属性中
SELECT name AS '@c1',age AS '@c2',sex AS '@c3'  FROM xmldata FOR XML PATH('XMLRow') , root('XMLData')
--PATH('XMLRow')定义行标签名称 , root('XMData')定义根标签名称,定义属性名称要加单引号和@

 

 

--将数据存入节点中
SELECT name AS c1,age AS c2,sex AS c3 FROM xmldata FOR XML PATH('XMLRow') , ROOT('XMLData')
--字段别称定义数据节点的名称 

解析XML数据 

1、xml:        能认识元素、属性和值
    
2、xpath:    寻址语言,类似windows目录的查找(没用过dir命令的话就去面壁)
                
                语法格式,这些语法可以组合为条件:
                "."表示自己,".."表示父亲,"/"表示儿子,"//"表示后代,
                "name"表示按名字查找,"@name"表示按属性查找
                
                "集合[条件]" 表示根据条件取集合的子集,条件可以是
                    数  值:数字,last(),last()-数字 等
                    布尔值:position()<数字,@name='条件',name='条件'
                条件是布尔值的时候可以合并计算:and or
    
3、xquery:    基于xpath标的准查询语言,sqlserver xquery包含如下函数
                exist(xpath条件):返回布尔值表示节点是否存在
                query(xpath条件):返回由符合条件的节点组成的新的xml文档
                value(xpath条件,数据类型):返回指定的标量值,xpath条件结果必须唯一
                nodes(xpath条件): 返回由符合条件的节点组成的一行一列的结果表

declare @data xml
set @data='
<bookstore>
<book category="COOKING">
  <title lang="en">Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>
<book category="CHILDREN">
  <title lang="jp">Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>
<book category="WEB">
  <title lang="en">XQuery Kick Start</title>
  <author>James McGovern</author>
  <author>Per Bothner</author>
  <author>Kurt Cagle</author>
  <author>James Linn</author>
  <author>Vaidyanathan Nagarajan</author>
  <year>2003</year>
  <price>49.99</price>
</book>
<book category="WEB">
  <title lang="cn">Learning XML</title>
  <author>Erik T. Ray</author>
  <year>2003</year>
  <price>39.95</price>
</book>
</bookstore>
'


SELECT T.C.value('@category','varchar(max)') as category,
T.C.value('title[1]','varchar(max)') as title,
T.C.value('title[1]/@lang','varchar(max)') as lang,
T.C.value('author[1]','varchar(max)') as author,
T.C.value('author[2]','varchar(max)') as author1
FROM @data.nodes('/bookstore/book') as T(C)

猜你喜欢

转载自blog.csdn.net/weixin_39934264/article/details/84875297
今日推荐