繁体   English   中英

Xquery需要一个单例:列名是一个属性

[英]Xquery requires a singleton :the column name is an attribute

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)

我想通过使用XQUERY来解析简单的内容。 我总是会收到这样的错误。 我为此奋斗了好几天。 原因是列名是一个属性。 谢谢。

消息2389,第16层,状态1,第23行
XQuery [value()]:'value()'需要一个单例(或空序列),找到类型为'xdt:untypedAtomic *'的操作数

我想收到的结果是

DATE_OF_BIRTH     DRIVER
---------------------------
19871224           MIKE
19881124           TOM
19770601           DAVID

尝试这个:

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)

基本上,您选择<root>下的所有<a>元素,并为每个元素选择包含两个@nm属性之一的包含的<b>元素,以获取详细信息。

为我产生所需的输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM