Den XML du får er korrekt. Det er XML , ikke tekst, og kan læses som XML af en XML-parser. Specialtegn escapes korrekt, som de skal være. Uanset hvilket klientmodul du har, der bruger den XML, skal den parse den som XML, ikke som tekst, og så vises den korrekt.
Opdatering:
Hvis det ikke er klart, er alt hvad du skal gøre i din forespørgsel at behandle XML som XML og tekst som tekst, ikke blande XML som tekst, dvs.:
;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