2

我正在使用 OPENXML 解析一些 xml。我需要从 XML 中获取一个 Identity 以了解节点的顺序。

@mp:id 总是有序的吗?我知道它们不是顺序的,但它们至少是有序的吗?

例如,以下查询是否总是以与 XML 完全相同的顺序生成结果?

    SELECT  row_number() OVER (ORDER BY OrderID) rn, 
            StepID, CONVERT(varchar(max), CONVERT(VARBINARY(max), StepID), 2), 
            [ACTION]
    FROM    OPENXML(@idoc, 'descendant::step |descendant::compref', 2)
            WITH ([OrderID] INT '@mp:id',
                  [StepID] INT '@id',
                  [Action] VARCHAR(max) 'parameterizedString[1]')
    ORDER BY rn

还是@mp:id 是一种元数据,可以根据保存方式以任何顺序排列?

4

1 回答 1

1

您无法保证正确的顺序。要拥有它,您可以生成数字序列(例如,带有列 Number 的 NF 表),然后使用 XPath 和 position() 函数查询您的 XML:

SELECT NF.Number,Order_id FROM NF
CROSS APPLY(SELECT Table.Row.value('@Id','int') Order_Id
    FROM @xml.nodes('//Root/Order[position()=sql:column("NF.Number")]') AS Table(Row))  AS XMLTable
于 2011-04-06T07:25:30.277 回答