--将book元素映射到数据表book列
select Tab.Col.query('.') as book from @data.nodes('/bookstore/book')Tab(Col); --查询price元素的位置和值
SELECT a.number as position,b.price
FROM master.dbo.spt_values A
CROSS APPLY (
SELECT C.value('price[1]','float') as price
FROM @data.nodes('/bookstore/book[position()=sql:column("number")]')T(C)) b
WHERE A.type='P'
模糊查询
--获取所有包含lang属性的节点
select @data.query('//*[@lang]')
/*output:
Everyday Italian
Harry Potter
XQuery Kick Start
Learning XML*/
--获取所有book节点
select @data.query('/bookstore/*')
/*output:
*/
--获取所有包含属性的title节点
select @data.query('//title[@*]')
/*output:
Everyday Italian
Harry Potter
XQuery Kick Start
Learning XML*/
--读取根节点的名称
SELECT @data.value('local-name(/*[1])','VARCHAR(20)') AS ElementName
/*output
bookstore
*/
--读取第三级上第一个节点的名称和值
SELECT @data.value('local-name((/*/*/*)[1])','VARCHAR(20)') AS ElementName,
@data.value('(/*/*/*/text())[1]','VARCHAR(20)') AS ElementValue
/*output
title Everyday Italian
*/
--读取第二级上第一个节点下属节点的名称和值
SELECT
C.value('local-name(.)','VARCHAR(200)') AS ElementName,
C.value('.','VARCHAR(200)') AS ElementValue
FROM @data.nodes('/*/*[1]/*') T(C)