【问题标题】:Xquery requires a singleton :the column name is an attributeXquery 需要一个单例:列名是一个属性
【发布时间】:2016-06-10 21:04:18
【问题描述】:
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

【问题讨论】:

    标签: sql-server xml xquery


    【解决方案1】:

    试试这个:

    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)
    

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

    为我生成所需的输出。

    【讨论】:

    • 非常感谢您的回答。有用。周末愉快!
    猜你喜欢
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 2012-03-01
    • 1970-01-01
    • 2021-06-01
    • 2017-12-14
    • 2010-10-20
    相关资源
    最近更新 更多