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

Come convertire la gerarchia nidificata di XML in tabella sql

Che ne dici di questo (ho dichiarato @input essere una variabile del tipo di dati XML con il tuo contenuto XML - sostituisci di conseguenza):

SELECT
    Parent.Elm.value('(@ID)[1]', 'int') AS 'ID',
    Parent.Elm.value('(Title)[1]', 'varchar(100)') AS 'Title',
    Parent.Elm.value('(Description)[1]', 'varchar(100)') AS 'Description',
    Child.Elm.value('(@ID)[1]', 'int') AS 'ChildID',
    Child.Elm.value('(Title)[1]', 'varchar(100)') AS 'ChildTitle',
    Child.Elm.value('(StartDate)[1]', 'DATETIME') AS 'StartDate',
    Child.Elm.value('(EndDate)[1]', 'DATETIME') AS 'EndDate'
FROM
    @input.nodes('/ROOT/WrapperElement/ParentElement') AS Parent(Elm)
CROSS APPLY
    Parent.Elm.nodes('ChildElement') AS Child(Elm)

Fondamentalmente esegui l'iterazione su tutto il /ROOT/WrapperElement/ParentElemet nodi (come Parent(Elm) pseudo tabella) e per ciascuna di queste voci, esegui un CROSS APPLY per gli elementi figlio contenuti all'interno di quel ParentElement ed estrarre le informazioni necessarie.

Dovrebbe funzionare - spero!