Всегда ли @mp: id в порядке XML-документа? - PullRequest
2 голосов
/ 28 марта 2011

Я анализирую некоторые XML с помощью OPENXML. Мне нужно убрать Identity из XML, чтобы знать порядок узлов.

@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 - это мета-данные, которые могут располагаться в любом порядке в зависимости от того, как они сохранены?

1 Ответ

1 голос
/ 06 апреля 2011

У вас нет гарантии правильного заказа.Чтобы получить его, вы можете сгенерировать последовательность чисел (например, таблицу NF со столбцом Number), а затем запросить ваш XML, используя XPath с функцией position ():

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
...