Предположим, у вас есть поле XML в таблице базы данных, которое выглядит следующим образом:
<PEOPLE>
<PERSON>
<FIRST_NAME>John</FIRST_NAME>
<LAST_NAME>Doe</LAST_NAME>
</PERSON>
<PERSON>
<FIRST_NAME>Jane</FIRST_NAME>
<LAST_NAME>Doe</LAST_NAME>
</PERSON>
</PEOPLE>
И вы хотели внести имена всех людей в список через запятую (например, «Джон Доу, Джейн Доу»). Прямо сейчас мой SQL запрос выглядит так:
SELECT STUFF((
SELECT ', ' + FIRST_NAME + ' ' + LAST_NAME
FROM(
SELECT
p.value('(./FIRST_NAME)[1]', 'nvarchar(max)') as FIRST_NAME,
p.value('(./LAST_NAME)[1]', nvarchar(max)') as LAST_NAME
FROM [TABLE]
CROSS APPLY [FIELD].nodes('PEOPLE/PERSON') t(p)
) PEOPLE_ROWS
FOR XML PATH('')), 1, 1, '') COMMA_SEPARATED_LIST
Сейчас это работает просто отлично, и я получаю хороший список через запятую, но я подумал, что есть более простой способ сделать это. Есть ли маги xpath c, которые дают результаты симлара?