Sql @mp:id是否总是按照XML文档的顺序排列?
我正在使用OPENXML解析一些xml。我需要从XML中获取一个标识,以了解节点的顺序 @mp:id是否总是有序的?我知道它们不是连续的,但它们至少是有序的吗 例如,下面的查询是否总是以与XML完全相同的顺序生成结果Sql @mp:id是否总是按照XML文档的顺序排列?,sql,sql-server,xml,sql-server-2008,sql-server-openxml,Sql,Sql Server,Xml,Sql Server 2008,Sql Server Openxml,我正在使用OPENXML解析一些xml。我需要从XML中获取一个标识,以了解节点的顺序 @mp:id是否总是有序的?我知道它们不是连续的,但它们至少是有序的吗 例如,下面的查询是否总是以与XML完全相同的顺序生成结果 SELECT row_number() OVER (ORDER BY OrderID) rn, StepID, CONVERT(varchar(max), CONVERT(VARBINARY(max), StepID), 2),
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是一种元数据类型的东西,可以根据保存的方式按任何顺序排列?您不能保证顺序正确。为此,您可以生成数字序列(例如带有列号的NF表),然后使用XPath with 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