Существуют ситуации, когда человеку может не потребоваться правильно сформированный XML - тот, с которым я (и, возможно, оригинальный автор) столкнулся, использовал технику For XML Path, чтобы возвратить список с одним полем «дочерних» элементов через рекурсивный запрос. Более подробная информация об этом методе находится здесь (в частности, в разделе «XML-методы черного ящика»):
Объединение значений строк в Transact-SQL
Для моей ситуации видение «H & E» (пятно патологии), преобразованного в «хорошо сформированный XML», было настоящим разочарованием. К счастью, я нашел решение ... следующая страница помогла мне относительно легко решить эту проблему без необходимости повторной архитектуры моего рекурсивного запроса или добавления дополнительного анализа на уровне представления (для этого, а также для других / будущих ситуаций, когда мой ребенок поля данных (содержат зарезервированные символы XML): Обработка специальных символов с помощью FOR XML PATH
РЕДАКТИРОВАТЬ: код ниже из ссылки на блоге.
select
stuff(
(select ', <' + name + '>'
from sys.databases
where database_id > 4
order by name
for xml path(''), root('MyString'), type
).value('/MyString[1]','varchar(max)')
, 1, 2, '') as namelist;