我将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
是否只有一个选择(没有变量)可以获得结果?
答案 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);