После того, как вы исправили неверный XML (элементы <name>
должны заканчиваться тегом </name>
), вы сможете использовать это:
SELECT
Meetings.List.value('(id)[1]', 'int') AS 'Meeting ID',
Meeting.Participant.value('(name)[1]', 'varchar(50)') AS 'Name'
FROM
@input.nodes('/root/meetings/meeting') AS Meetings(List)
CROSS APPLY
Meetings.List.nodes('participants/participant') AS Meeting(Participant)
По сути, первый вызов .nodes()
дает вам псевдотаблица всех <meeting>
узлов, из которых я извлекаю ID собрания.
Второй .nodes()
вызов этого тега <meeting>
копает глубже в список <participants>/<participant>
подузлов и извлекает имя из этих узлов.