sql >> Database >  >> RDS >> Sqlserver

Hiërarchische XML in SQL afvlakken met de methode nodes()

Ik schijn mijn eigen vraag te hebben beantwoord na wat meer online rond te kijken:

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 gebruiken Ik kan de grandparent op het hoogste niveau selecteren knooppunt en gebruik dit om de onderliggende parent . te selecteren knooppunten enzovoort. Met behulp van deze methode heb ik de uitvoering van mijn query in ongeveer 1 minuut en 30 seconden tot ongeveer 6 seconden .

Interessant is echter dat als ik de "oude" OPEN XML . gebruik methode om dezelfde gegevens op te halen, wordt de query uitgevoerd in 1 seconde !

Het lijkt erop dat u het gebruik van deze twee technieken van geval tot geval moet bekijken, afhankelijk van de verwachte omvang/complexiteit van het document dat wordt doorgegeven.




  1. Oracle SQL Developer 21.4.2 en SQLcl 21.4.1 zijn nu beschikbaar

  2. De beste manier om te zoeken naar gedeeltelijke woorden in een grote MySQL-dataset

  3. Herstel na verkeerde MySQL-updatequery?

  4. MySQL Opgeslagen Procedure Foutafhandeling