XML, който получавате, е правилен. Това е XML , не текст и може да се чете като XML от XML анализатор. Специалните знаци са правилно екранирани, както трябва да бъдат. Какъвто и клиентски модул, който имате, който консумира, XML трябва да го анализира като XML, а не като текст, и след това ще се покаже правилно.
Актуализация:
В случай, че не е ясно, всичко, което трябва да направите във вашата заявка, е да третирате XML като XML и текста като текст, а не да смесвате XML като текст, т.е.:
;WITH CodeValues AS
(
SELECT
Number,SUBSTRING(@R,Number,1) AS R,ASCII(SUBSTRING(@U,Number,1)) AS UA
FROM Numbers
WHERE Number<=LEN(@R)
)
, XmlValues AS (
SELECT
t.RowID
,(SELECT
''+c.R
FROM Numbers n
INNER JOIN CodeValues c ON ASCII(SUBSTRING(t.Unreadable,n.Number,1))=c.UA
WHERE n.Number<=LEN(t.Unreadable)
FOR XML PATH(''), TYPE
) AS readable
FROM @TestTable t)
SELECT x.RowId,
x.readable.value('.', 'VARCHAR(8000)') as readable
FROM XmlValues AS x