Vad sägs om detta (jag deklarerade @input att vara en XML-datatypvariabel med ditt XML-innehåll - ersätt därefter):
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)
Du itererar i princip över alla /ROOT/WrapperElement/ParentElemet noder (som Parent(Elm) pseudotabell), och för var och en av dessa poster gör du sedan en CROSS APPLY för de underordnade elementen som finns inuti det ParentElement och plocka fram nödvändig information.
Borde fungera - hoppas jag!