Recherche d'un ordre de noeud dans un document XML dans SQL Server

Comment puis-je trouver l'ordre des nœuds dans un document XML?

Ce que j'ai est un document comme ceci:

<value code="1">
    <value code="11">
        <value code="111"/>
    </value>
    <value code="12">
        <value code="121">
            <value code="1211"/>
            <value code="1212"/>
        </value>
    </value>
</value>

et je vais essayer d'obtenir cette chose dans une table est définie comme

CREATE TABLE values(
    code int,
    parent_code int,
    ord int
)

La préservation de l'ordre des valeurs à partir du document XML (ils ne peuvent pas être commandés par leur code). Je veux être capable de dire

SELECT code 
FROM values 
WHERE parent_code = 121 
ORDER BY ord

et les résultats devraient, de façon déterministe, être

code
1211
1212

J'ai essayé

SELECT 
    value.value('@code', 'varchar(20)') code, 
    value.value('../@code', 'varchar(20)') parent, 
    value.value('position()', 'int')
FROM @xml.nodes('/root//value') n(value)
ORDER BY code desc

Mais il n'accepte pas la position() fonction ('position()' ne peut être utilisé à l'intérieur d'un prédicat ou XPath sélecteur).

Je suppose que c'est possible d'une certaine façon, mais comment?

source d'informationauteur erikkallen