我有这个:
<pss>
<ps n="А parent node" m="654564654" t="435,8551" a="2857,2716">
<sc s="a1" a="25,4220"/>
<sc s="a2" a="0"/>
<sc s="a3" a="2395,9945"/>
</ps>
...
</pss>
我需要在一个查询中选择“А父节点m属性和a1-a2 a值”。 我试过这个,但它不起作用:
SELECT ps.value('@m', 'nvarchar(50)') "parent node",
-- sc.value('@a1', 'nvarchar(50)') "название услуги",
-- sc.value('@a2', 'nvarchar(50)') "стоимость услуги",
ps.value('@a3, 'nvarchar(50)') "b","
FROM mts.dbo.bill
OUTER APPLY xCol.nodes('//Report/rp/pss/ps') AS A(ps)
OUTER APPLY xCol.nodes('//Report/rp/pss/ps/sc/.') AS B(sc)
提前完成。
答案 0 :(得分:0)
提供的XML文档中没有a1
,a2
或a3
属性!
使用强>:
/pss/ps/@*[name(.)='n' or name(.)='m']
|
/pss/ps/sc/@a
这是XPath表达式,用于从提供的XML文档中选择所需的节点。我不确定它应该如何组合成SQL命令。
答案 1 :(得分:0)
declare @document xml
set @document = N'
<pss>
<ps n="А parent node" m="654564654" t="435,8551" a="2857,2716">
<sc s="a1" a="25,4220"/>
<sc s="a2" a="0"/>
<sc s="a3" a="2395,9945"/>
</ps>
</pss>'
select
pses.ps.value(N'@m', N'NVARCHAR(10)')
, scs.sc.value(N'@s', N'NVARCHAR(2)')
from
@document.nodes(N'//ps') pses(ps)
cross apply
pses.ps.nodes(N'//sc') scs(sc)