【问题标题】:How do I get the child node values AND parent node values in SQL XPath如何在 SQL XPath 中获取子节点值和父节点值
【发布时间】:2023-03-16 20:01:01
【问题描述】:

我的数据(传递到存储过程中的参数 (@Data XML))如下所示:

<Records>
    <Record id="1">
        <Data>
            <FirstName>John</FirstName>
            <LastName>Doe</LastName>
        </Data>
        <Result>
            <StatusId>3</StatusId>
            <ErrorCodes>
                <Item>4</Item>
                <Item>23</Item>
                <Item>19</Item>
            </ErrorCodes>
        </Result>
    </Record>
   <Record id="2">
        <Data>
            <FirstName>Fred</FirstName>
            <LastName>Blog</LastName>
        </Data>
        <Result>
            <StatusId>2</StatusId>
            <ErrorCodes>
                <Item>1</Item>
                <Item>3</Item>
            </ErrorCodes>
        </Result>
    </Record>
</Records>

我想选择记录 ID 和错误代码,如下所示:

id    Item
----------
 1       4
 1      23
 1      19
 2       1
 2       3

数据的顺序无关紧要。

以下为我获取错误代码,但不是记录 ID:

SELECT Data.value('.', 'int') as ErrorCode
FROM @Data.nodes('/Records/Record/Result/ErrorCodes/*') AS data(Data)

【问题讨论】:

  • @OzrenTkalcecKrznaric 很抱歉没有包含此信息,我现在已经编辑了我的问题以包含我到目前为止所获得的内容。

标签: sql-server xml xpath


【解决方案1】:

这个表达式应该得到你的 parent-of-parent-of-parent 元素:

Data.query('../../..')

...所以试试这样的东西(未经测试)...

SELECT
  id = Data.value('../../../@id', 'int'),
  item = Data.value('.', 'int')
FROM @Data.nodes('/Records/Record/Result/ErrorCodes/*') AS data(Data)

【讨论】:

    猜你喜欢
    • 2016-05-04
    • 1970-01-01
    • 2015-03-30
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    相关资源
    最近更新 更多