Zdarzają się sytuacje, w których osoba może nie chcieć dobrze sformułowanego kodu XML — ten, który napotkałem (i być może oryginalny autor), wykorzystywał technikę For XML Path do zwracania listy pojedynczych pól zawierających elementy „podrzędne” za pomocą zapytania rekurencyjnego. Więcej informacji na temat tej techniki znajduje się tutaj (w szczególności w sekcji „Metody XML blackboxa”):Łączenie wartości wierszy w Transact-SQL
W mojej sytuacji ujrzenie „H&E” (plamy patologicznej) przekształconej w „dobrze uformowany XML” było prawdziwym rozczarowaniem. Na szczęście znalazłem rozwiązanie... poniższa strona pomogła mi rozwiązać ten problem stosunkowo łatwo i bez konieczności zmiany architektury mojego zapytania rekurencyjnego lub dodawania dodatkowego parsowania na poziomie prezentacji (w tym jak również w innych/przyszłych sytuacjach, w których moje dziecko Pola danych -rows zawierają zastrzeżone znaki XML):Obsługa znaków specjalnych za pomocą FOR XML PATH
EDYCJA:kod poniżej z wpisu na blogu, do którego się odwołuje.
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;