Otrzymany kod XML jest poprawny. To jest XML , a nie tekst i czytelny jako XML przez parser XML. Znaki specjalne są odpowiednio zmieniane, tak jak powinny. Jakikolwiek moduł klienta, który posiadasz, który wykorzystuje ten XML, powinien przeanalizować go jako XML, a nie jako tekst, a następnie wyświetli się poprawnie.
Aktualizacja:
Jeśli nie jest jasne, wszystko, co musisz zrobić w swoim zapytaniu, to traktować XML jako XML, a tekst jako tekst, a nie mieszać XML jako tekst, tj.:
;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