DECLARE @XML XML
SET @xml = '
<root>
<a>
<b nm="DATE OF BIRTH"> 19871224</b>
<b nm="DRIVER"> MIKE </b>
</a>
<a>
<b nm="DATE OF BIRTH"> 19881124</b>
<b nm="DRIVER"> TOM </b>
</a>
<a>
<b nm="DATE OF BIRTH"> 19770601</b>
<b nm="DRIVER"> DAVID </b>
</a>
</root>'
select
pd.value('//b[@nm="DATE OF BIRTH"][1]','varchar(100)')
from
@xml.nodes('//a') as x(Rec)
cross apply
@xml.nodes('//a/b') as i(pd)
我想解析简单的BY USING XQUERY。我总是得到这样的错误。我挣扎了几天。原因是列名是属性。谢谢。
Msg 2389,Level 16,State 1,Line 23
的操作数
XQuery [value()]:&#39; value()&#39;需要一个单例(或空序列),找到类型为&#39; xdt:untypedAtomic *&#39;
我想收到的结果是
DATE_OF_BIRTH DRIVER
---------------------------
19871224 MIKE
19881124 TOM
19770601 DAVID
答案 0 :(得分:2)
试试这个:
select
Date_of_Birth = pd.value('(b[@nm="DATE OF BIRTH"])[1]', 'varchar(50)'),
Driver = pd.value('(b[@nm="DRIVER"])[1]', 'varchar(50)')
from
@xml.nodes('/root/a') as i(pd)
基本上,您选择<a>
下的所有<root>
元素,并且对于每个元素,您可以使用两个<b>
属性中的任何一个来抓取包含的@nm
元素获取详细信息。
为我制作所需的输出。