SQL获取XML的叶节点

标签 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))

最佳答案

下面将为您提供节点。但是您的示例 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

关于SQL获取XML的叶节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50993222/

相关文章:

sql - 比较两个不同表中的列

sql - 为最长的用户连胜获得适当的计数

java - jackson xml 列出被识别为重复键的反序列化

sql-server - 导入数据不保留身份列自动插入到目标表中?

sql - 由于 EF 不支持 DELETE SET NULL,我可以在 EF 之外运行 SQL 命令来执行此操作吗?

sql - 为什么在 SQL Server 中查询日期数据类型为 yyyymmdd 而不是 yyyy-mm-dd?

android - 使用 simonvt 数字选择器时出现 ClassCastException

xml - xslt中的时区转换

sql-server - 在 SQL Server Management Studio 中禁用右键单击脚本更改表

sql-server - 更改 SSMS2012 中禁用的数据库兼容级别的选项