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!