sql >> Base de Datos >  >> RDS >> Sqlserver

FOR XML PATH(''):Caracteres especiales de escape

El XML que obtienes es correcto. Es XML , no texto, y legible como XML por un analizador XML. Los caracteres especiales se escapan correctamente, como debería ser. Cualquiera que sea el módulo de cliente que tenga que consuma ese XML, debe analizarlo como XML, no como texto, y luego se mostrará correctamente.

Actualización:

En caso de que no esté claro, todo lo que necesita hacer en su consulta es tratar XML como XML y texto como texto, no mezclar XML como texto, es decir:

;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