SQL获取XML的叶节点

时间:2018-06-22 17:46:32

标签: sql xml ssms

我正在尝试解析任何叶节点的xml数据 它的结构如下:

<xmlPlan>
    <myOp id='0' usage='0.75'>
        ....
        <myOp id='2' usage='0.45'>
            ...
        </myOp>
        <myOp id ='3' usage='0.30'>
            ...
        </myOp>
    </myOp>
    <myOp id='1' usage='0.35'>
        ...
    </myOp>
</xmlPlan>

我需要选择叶节点1 2和3并操纵这些节点内的使用次数。 我用它来从数据库中提取XML:

DECLARE @queryID INT = 1 

/* get xml with queryID */
DECLARE @xml XML
SET @xml = (SELECT TOP 1 myPlan FROM myTable 
                    WHERE stmtID in (@queryID))

1 个答案:

答案 0 :(得分:1)

下面将为您提供节点。但是您的示例XML不适用于节点中的属性a, b, c

declare @a xml
declare @b xml

create table #t (
 v varchar(max)
)

set @a = ' <rootNode>
    <node>
        <node>
            some data
        </node>
        <node>
            some data
        </node>
    </node>
    <node>
        some data
    </node>
</rootNode>'

Insert into #t(v)
values(convert(varchar(max), @a))

Select @b = v from #t


SELECT c.value('local-name(.)', 'varchar(max)') as 'node'
    , c.value('.', 'varchar(max)') as 'value'
from @b.nodes('/rootNode//*[not(*)] ') as a(c)

drop table #t