如何将XML单元格解析为没有变量的多个记录?

时间:2019-02-21 11:21:06

标签: sql sql-server sql-server-2012

我将XML数据作为nvarchar存储在表中。我运行查询以将数据获取到变量并将变量解析为多行

declare @contenttable table(id int, xdata nvarchar(max))
insert into @contenttable values(1,'
<root>
<group Description="firstgroup">
    <nodeA age="10" birthplace="Anchorage"/>
    <nodeB mode="A" ability="read"/>
</group>
<group Description="nextgroup">
    <nodeA age="10" birthplace="London"/>
    <nodeB count="2" birthplace="Paris"/>
</group>
</root>')

declare @xml xml

select @xml = xdata from @contenttable where id=1

select
        c.value('@Description', 'varchar(max)') as 'Description'
from @xml.nodes('/root/*') as T(c)

结果是(实际情况更接近How to get XML subnodes as strings along with parent attributes?

Description
===========
firstgroup   
nextgroup

是否只有一个选择(没有变量)可以获得结果?

1 个答案:

答案 0 :(得分:1)

只需将变量名称替换为列的名称,并将表包括在您的FROM中:

SELECT c.value('@Description', 'varchar(max)') AS Description
FROM @contenttable ct
     CROSS APPLY ct.xdata.nodes('/root/*') T(c);

注意,假定,您将列的数据类型更改为xml。 XQUERY不适用于(n)varchar数据类型。

SELECT c.value('@Description', 'varchar(max)') AS Description
FROM @contenttable ct
     CROSS APPLY (VALUES(TRY_CONVERT(xml,ct.xdata))) V(xdata)
     CROSS APPLY V.xdata.nodes('/root/*') T(c);