如何在SQL XPath中获取子节点值和父节点值

3

我的数据(传递给存储过程中的参数(@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 对不起,我没有包含这些信息,现在我已经编辑了我的问题并包含了我目前所拥有的内容。 - Matt
1个回答

3
这个表达式可以获取元素的父级的父级的父级元素:
Data.query('../../..')

...所以尝试类似以下代码(未经测试)...

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接