使用openxml读取XML中的多个子节点(SQL Server 2005)

时间:2015-02-03 09:42:44

标签: openxml

XML树是 -

<OrderLine>
    <Item>ABC</Item>
        <Lot>
            <Serial>SR1</Serial>
            <Quantity>1</Quantity>
        </Lot>
        <Lot>
            <Serial>SR1</Serial>
            <Quantity>1</Quantity>
        </Lot>
</OrderLine>

尝试在SQL Server 2005(存储过程)中使用openxml解析此树的元素值时,只读取一个。

这是代码 -

select item, lots
from openxml(@intDataAreaRoot, 'OrderLine', 2)
        with    (   item    nvarchar(31)    'Item',
                    lots    xml             'Lot'
        )

我用它来声明一个游标,然后解析&amp;处理树中可能存在的行数。但每个&#34; fetch&#34;只带来一个&#34; Lot&#34;节点。我需要处理所有&#34; Lot&#34; &#34; OrderLine&#34;下的节点节点。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

使用SQL Server 2005中的原生XQuery 支持尝试这样的事情:

DECLARE @intDataAreaRoot  XML = '<OrderLine>
    <Item>ABC</Item>
        <Lot>
            <Serial>SR1</Serial>
            <Quantity>1</Quantity>
        </Lot>
        <Lot>
            <Serial>SR2</Serial>
            <Quantity>21</Quantity>
        </Lot>
</OrderLine>'

SELECT
    Item = @intDataAreaRoot.value('(/OrderLine/Item)[1]', 'varchar(25)'),
    xc.value('(Serial)[1]', 'varchar(20)'),
    xc.value('(Quantity)[1]', 'int')
FROM
    @intDataAreaRoot.nodes('/OrderLine/Lot') AS XT(XC)

这给了我一个输出:

Item    (No column name)    (No column name)
---------------------------------------------
ABC            SR1                  1
ABC            SR2                 21