如何 select xml 节点 sql 服务器的每个值
How to select each value for xml node sql server
我的 sql 服务器 table 中有一个 xml 列,其中 XML 如下所示:
<Alternate>
<Suggestion>
<Details>
<Number>51</Number>
</Details>
</Suggestion>
<Suggestion>
<Details>
<Number>53</Number>
</Details>
</Suggestion>
</Alternate>
我希望能够将 Number 标记的每个值提取到一个如下所示的列中:
Number
51
53
我尝试使用 CROSS APPLY 进行此操作,但它只会为每一行提取第一个值:
Number
51
51
我为此编写的 SQL 查询如下所示:
SELECT [XML].value('(//Alternate/Suggestion/Details/Number)[1]','nvarchar(255)') as Improvement_Number
FROM Table
CROSS APPLY [XML].nodes('(//Aternate/Suggestion/Details/Number)') AS T2(Improv)
有人可以向我解释一下我做错了什么吗?
任何帮助都会很棒
谢谢
正在创建 table 并像这样插入一行:
create table alternate ([XML] xml)
insert into alternate values (N'<Alternate>
<Suggestion>
<Details>
<Number>51</Number>
</Details>
</Suggestion>
<Suggestion>
<Details>
<Number>53</Number>
</Details>
</Suggestion>
</Alternate>')
您可以这样查询:
select
b.Improv.value('.', 'nvarchar(255)') Number
from
alternate a
cross apply a.[XML].nodes('//Alternate/Suggestion/Details/Number') b(Improv)
结果:
Number
51
53
我的 sql 服务器 table 中有一个 xml 列,其中 XML 如下所示:
<Alternate>
<Suggestion>
<Details>
<Number>51</Number>
</Details>
</Suggestion>
<Suggestion>
<Details>
<Number>53</Number>
</Details>
</Suggestion>
</Alternate>
我希望能够将 Number 标记的每个值提取到一个如下所示的列中:
Number
51
53
我尝试使用 CROSS APPLY 进行此操作,但它只会为每一行提取第一个值:
Number
51
51
我为此编写的 SQL 查询如下所示:
SELECT [XML].value('(//Alternate/Suggestion/Details/Number)[1]','nvarchar(255)') as Improvement_Number
FROM Table
CROSS APPLY [XML].nodes('(//Aternate/Suggestion/Details/Number)') AS T2(Improv)
有人可以向我解释一下我做错了什么吗? 任何帮助都会很棒
谢谢
正在创建 table 并像这样插入一行:
create table alternate ([XML] xml)
insert into alternate values (N'<Alternate>
<Suggestion>
<Details>
<Number>51</Number>
</Details>
</Suggestion>
<Suggestion>
<Details>
<Number>53</Number>
</Details>
</Suggestion>
</Alternate>')
您可以这样查询:
select
b.Improv.value('.', 'nvarchar(255)') Number
from
alternate a
cross apply a.[XML].nodes('//Alternate/Suggestion/Details/Number') b(Improv)
结果:
Number
51
53