我在xml文件中有多个“ abc”节点,但是它按我们指定的[1]返回第一行的值,如果我写[2],它将返回第二行。
我想在所有“ abc”循环中返回“ 元素”的所有值。
使用查询:
Insert Into @temp(aa,bb)
SELECT
y.b.value('(abc/Segment/Element)[1]', 'NVARCHAR(50)') ,
y.b.value('(abc/Segment/Element)[1]', 'NVARCHAR(50)')
FROM @x.nodes('(a1/b1/c1)') AS y(b)
下面的查询给出了所需的结果,但是我无法使用该查询,因为我需要从同一查询中的位置a1 / b1 / c1访问其他字段
Insert Into @temp(aa,bb)
SELECT
y.b.value('(Segment/Element)[1]', 'NVARCHAR(50)') ,
y.b.value('(Segment/Element)[1]', 'NVARCHAR(50)')
FROM @x.nodes('(a1/b1/c1/abc)') AS y(b)
答案 0 :(得分:1)
在cross apply
上使用y.b
来获取abc
的行。
select z.b.value('(Segment/Element)[1]', 'nvarchar(50)') ,
z.b.value('(Segment/Element)[1]', 'nvarchar(50)')
from @x.nodes('(a1/b1/c1)') as y(b)
cross apply y.b.nodes('abc') as z(b);