Какво ще кажете за това (декларирах @input
да бъде променлива тип XML данни с вашето XML съдържание - заменете съответно):
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)
Вие основно итерирате всички /ROOT/WrapperElement/ParentElemet
възли (като Parent(Elm)
псевдо таблица) и за всеки от тези записи след това правите CROSS APPLY
за дъщерните елементи, съдържащи се вътре в този ParentElement
и извадете необходимата информация.
Трябва да работи - надявам се!