sql >> Databáze >  >> RDS >> Sqlserver

Sloučení hierarchického XML v SQL pomocí metody nodes().

Zdá se, že jsem odpověděl na svou vlastní otázku, když jsem se trochu víc rozkoukal online:

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)

Pomocí CROSS APPLY Mohu vybrat grandparent nejvyšší úrovně uzel a použijte jej k výběru podřízeného parent uzly a tak dále. Pomocí této metody jsem přerušil spuštění dotazu přibližně za 1 minutu 30 sekund přibližně na 6 sekund .

Zajímavé však je, že pokud použiji "starý" OPEN XML metoda k načtení stejných dat, dotaz se provede za 1 sekundu !

Zdá se, že možná budete muset přistupovat k použití těchto dvou technik případ od případu v závislosti na očekávané velikosti/složitosti předávaného dokumentu.




  1. Prevence SQL Injection v C

  2. Jak svázat horizontální hodnoty tabulky s vertikálními hodnotami jiné tabulky v databázi Oracle

  3. Nelze změnit tabulku, dochází k chybě 1067 Neplatná výchozí hodnota

  4. Co znamená omezení velikosti indexu MySQL?