sql >> データベース >  >> RDS >> Sqlserver

ノード()メソッドを使用したSQLの階層XMLのフラット化

    オンラインでもう少し調べた後、自分の質問に答えたようです:

    SELECT
        grandparent.gname.value('@name', 'VARCHAR(15)'),
        parent.pname.value('@name', 'VARCHAR(15)'),
        child.cname.value('@name', 'VARCHAR(15)')
    FROM
        @xmlFamilyTree.nodes('/grandparent') AS grandparent(gname)
    CROSS APPLY
        grandparent.gname.nodes('*') AS parent(pname)
    CROSS APPLY
        parent.pname.nodes('children/*') AS child(cname)
    

    CROSS APPLYの使用 トップレベルのgrandparentを選択できます ノードを作成し、これを使用して子のparentを選択します ノードなど。このメソッドを使用して、クエリの実行を約1分30秒で実行しました。 約6秒まで 。

    興味深いことに、「古い」OPEN XMLを使用すると 同じデータを取得するメソッドの場合、クエリは1秒で実行されます !

    渡されるドキュメントの予想されるサイズ/複雑さに応じて、ケースバイケースでこれら2つの手法の使用にアプローチする必要があるようです。




    1. OracleSQLで最も近い日付を取得する方法

    2. TSQLコードからWebサービスを呼び出すことはできますか?

    3. PostgreSQLパフォーマンスチューニングのヒント

    4. デフォルトで例外をスローするようにPDOを設定します