Insira XML no banco de dados SQL Server 2008
-
26-09-2019 - |
Pergunta
Olá, estou tentando inserir alguns dados XML em uma tabela no SQL Server 2008. No entanto, continuo sendo lançado esse erro;
XML Parsing: Linha 1, caractere 39, incapaz de mudar a codificação
A coluna do banco de dados FileMeta usa o tipo de dados XML e eu alterno a codificação para o UTF-16, que acredito ser necessária para adicionar dados XML.
INSERT INTO testfiles
(filename, filemeta)
VALUES
('test.mp3', '<?xml version="1.0" encoding="utf-16" standalone="yes"?><!--This is a test XML file--><filemeta filetype="Audio"><Comments /><AlbumTitle /><TrackNumber /><ArtistName /><Year /><Genre /><TrackTitle /></filemeta>');
Ajuda, estou preso.
NB: Eu criei o XML com XMLTextWriter.
Solução
Sim, existem problemas quando você tenta inserir XML no SQL Server 2008 e o XML contém uma linha de instrução de codificação.
Normalmente, eu uso o uso do CONVERT
Função que me permite instruir o SQL Server a pular essas instruções - use algo assim:
INSERT INTO testfiles
(filename, filemeta)
VALUES
('test.mp3', CONVERT(XML, N'<?xml version="1.0" encoding="utf-16" standalone="yes"?>......', 2));
Definitivamente me ajudou a colocar várias coisas XML codificadas no SQL Server.
Veja o Msdn docs em elenco e convertido - um pouco abaixo da página, há vários estilos que você pode usar para CONVERT
com XML
E algumas explicações sobre eles.
Outras dicas
Você só precisa incluir N na frente da sua sequência XML para torná -la unicode.
INSERT INTO testfiles
(filename, filemeta)
VALUES
('test.mp3', N'<?xml version="1.0" encoding="utf-16" standalone="yes"?><!--This is a test XML file--><filemeta filetype="Audio"><Comments /><AlbumTitle /><TrackNumber /><ArtistName /><Year /><Genre /><TrackTitle /></filemeta>');
Isso funcionou para mim sem erros:
DECLARE @input XML
SET @input = N'<?xml version="1.0" encoding="utf-16" standalone="yes"?><!--This is a test XML file--><filemeta filetype="Audio"><Comments /><AlbumTitle /><TrackNumber /><ArtistName /><Year /><Genre /><TrackTitle /></filemeta>'
INSERT INTO testfiles (filename, filemeta)
VALUES ('test.mp3', @input);