2

OPENXML を使用して一部の xml を解析しています。ノードの順序を知るために、XML から ID を取得する必要があります。

@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 テーブル) を生成し、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
于 2011-04-06T07:25:30.277 に答える