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!