Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment convertir une hiérarchie imbriquée de xml en table sql

Que diriez-vous de ceci (j'ai déclaré @input être une variable de type de données XML avec votre contenu XML - remplacez en conséquence) :

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)

Vous parcourez essentiellement tous les /ROOT/WrapperElement/ParentElemet nœuds (comme Parent(Elm) pseudo table), et pour chacune de ces entrées, vous faites ensuite un CROSS APPLY pour les éléments enfants contenus dans ce ParentElement et extrayez les informations nécessaires.

Devrait fonctionner - j'espère !