从SQL Server上的XML选择值

suzh9iv8  于 2022-10-03  发布在  SQL Server
关注(0)|答案(0)|浏览(75)

我一直在尝试解析以下XML以提取SQL Server中的STATNAME和STATDIRECT的值

set @xml= '
<ENVELOPE>
    <STATNAME>ABC</STATNAME>
    <STATVALUE>
        <STATDIRECT>2</STATDIRECT>
        <STATCANCELLED></STATCANCELLED>
    </STATVALUE>
    <STATNAME>XYZ</STATNAME>
    <STATVALUE>
        <STATDIRECT>10</STATDIRECT>
        <STATCANCELLED>2</STATCANCELLED>
    </STATVALUE>
    <STATNAME>LMN</STATNAME>
    <STATVALUE>
        <STATDIRECT>20</STATDIRECT>
        <STATCANCELLED>2</STATCANCELLED>
    </STATVALUE>
</ENVELOPE>

使用XML节点提取值

SELECT
    t.v.value('(STATNAME/text())[1]','VARCHAR(100)') AS VOUCHERTYPE
    , i.p.value('(STATDIRECT/text())[1]','VARCHAR(100)') AS VCOUNT
FROM @XML.nodes('/ENVELOPE') AS t(v) 
CROSS APPLY @XML.nodes('/ENVELOPE/STATVALUE') AS i(p)

但这只重复了XML的第一个值,而不是迭代到下一行

输出

VOUCHERTYPE   VCOUNT
ABC           2
ABC           2
ABC           2

预期产量

VOUCHERTYPE   VCOUNT
ABC           2
XYZ           10
LMN           20

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题