Eu preciso cavar em uma tabela de logs com um esquema semelhante a este:
CREATE TABLE t (
id int PRIMARY KEY,
data varchar(max)
);
A coluna data
armazena um texto XML recebido de um serviço da web neste formato:
Esta é uma versão reduzida
<?xml version="1.0" encoding="UTF-8"?>
<PARAM>
<TAB DIM="30" ID="ZC3D2_1" SIZE="5">
<LIN NUM = "1">
<FLD NAME = "ZDOC" TYPE = "Char">Ferran López</FLD>
</LIN>
</TAB>
</PARAM>
Quando tento converter este texto para XML, recebo o próximo erro:
Análise XML: linha xx, caractere 48, caractere xml ilegal
Isso pode ser resolvido removendo a <xml>
tag, ou pelo menos, o encoding
atributo.
NOTA: Funciona bem se não houver caracteres especiais como
ó
, mesmo se eu não remover a<xml>
tag.
Pergunta
Existe uma maneira de convertê-lo em XML sem substituir ou remover a <xml>
tag?
CAST(REPLACE(data, 'encoding="UTF-8"', '') as XML)
db<>fique aqui
ATUALIZAR
O agrupamento do servidor é: Latin1_General_BIN
Mas mesmo se eu tentar alterar o agrupamento para o agrupamento usual de servidores, ele não funcionará.
SELECT
id,
CAST((data COLLATE Latin1_General_CI_AS) as XML)
FROM
t;