sql >> Database teknologi >  >> RDS >> Sqlserver

Udfladning af hierarkisk XML i SQL ved hjælp af nodes()-metoden

Jeg ser ud til at have besvaret mit eget spørgsmål efter at have kigget lidt mere rundt på nettet:

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)

Brug af CROSS APPLY Jeg kan vælge grandparent på øverste niveau node og brug denne til at vælge den underordnede parent noder og så videre. Ved at bruge denne metode har jeg fjernet min forespørgsel fra at blive udført på omkring 1 minut og 30 sekunder ned til omkring 6 sekunder .

Interessant nok, hvis jeg bruger den "gamle" OPEN XML metode til at hente de samme data, udføres forespørgslen på 1 sekund !

Det ser ud til, at du måske skal nærme dig brugen af ​​disse to teknikker fra sag til sag afhængigt af den forventede størrelse/kompleksitet af det dokument, der sendes ind.




  1. Vælg kolonne efter alias i MySQL

  2. Hvordan bruger man XPath med en variabel i Oracle XMLTable?

  3. hvordan laver man en php artikeltæller?

  4. EM12c tillader nu DB12c til Repos