Xquery中的xml.value()仅返回1条记录

时间:2018-08-10 05:34:57

标签: sql-server xquery-sql

我在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)

1 个答案:

答案 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);