我正在使用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是一种元数据类型,它可以根据事物的保存方式以任何顺序排列吗?
答案 0 :(得分:1)
您无法保证正确的订单。要拥有它,您可以生成数字序列(例如带有列号的NF表),然后使用带有position()函数的XPath查询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