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 !