ti-enxame.com

INSERIR XML no banco de dados do SQL Server 2008

Olá Estou tentando inserir alguns dados XML em uma tabela no SQL Server 2008. No entanto, continuo recebendo esse erro;

Análise XML: linha 1, caractere 39, incapaz de alternar a codificação

A coluna de banco de dados filemeta usa o tipo de dados XML, e mudei a codificação para 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.

24
wonea

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.

Eu normalmente me torno usando a função CONVERT que me permite instruir o SQL Server a ignorar 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 ajudou-me a obter várias coisas XML codificadas no SQL Server.

Veja o MSDN docs no CAST e CONVERT - um pouco abaixo da página há um número de estilos que você pode usar para CONVERT com XML e algumas explicações sobre eles.

30
marc_s

Você só precisa incluirNna frente da sua string XML para torná-lo 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>');
18
Joe Stefanelli

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);
0
Talha Imam