Còn điều này thì sao (tôi đã khai báo @input trở thành một biến kiểu dữ liệu XML với nội dung XML của bạn - hãy thay thế tương ứng):
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)
Về cơ bản, bạn lặp lại tất cả /ROOT/WrapperElement/ParentElemet các nút (dưới dạng Parent(Elm) bảng giả) và đối với mỗi mục trong số đó, bạn thực hiện CROSS APPLY cho các phần tử con chứa bên trong ParentElement đó và lấy ra những thông tin cần thiết.
Sẽ hiệu quả - tôi hy vọng!