sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo convertir jerarquía anidada de xml a tabla sql

¿Qué tal esto (declaré @input para ser una variable de tipo de datos XML con su contenido XML; reemplace en consecuencia):

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)

Básicamente, itera sobre todos los /ROOT/WrapperElement/ParentElemet nodos (como Parent(Elm) pseudo tabla), y para cada una de esas entradas, luego realiza una CROSS APPLY para los elementos secundarios contenidos dentro de ese ParentElement y extraiga la información necesaria.

Debería funcionar, ¡eso espero!