2010-09-02 13 views
22

Hola, estoy tratando de insertar algunos datos XML en una tabla en SQL Server 2008. Sin embargo, me siguen arrojando este error; análisisINSERTAR XML en la base de datos de SQL Server 2008

XML: línea 1, 39 caracteres, incapaz de cambiar la codificación

El filemeta columna de base de datos utiliza el tipo de datos XML, y he cambiar la codificación a UTF-16 que creo que es necesario para agregar datos 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>'); 

Ayuda, estoy atascado.

NB: Creé el XML con XMLTextWriter.

Respuesta

28

Sí, hay problemas cuando intenta insertar XML en SQL Server 2008 y el XML contiene una línea de instrucciones de codificación.

normalmente me sale alrededor de usar la función CONVERT que me permite instruir a SQL Server para omitir esas instrucciones - usar algo como esto:

INSERT INTO testfiles 
    (filename, filemeta) 
VALUES 
    ('test.mp3', CONVERT(XML, N'<?xml version="1.0" encoding="utf-16" standalone="yes"?>......', 2)); 

Ha ayudado definitivamente a conseguir varias cosas XML codificado en SQL Server.

Ver el MSDN docs on CAST and CONVERT - un poco más abajo en la página hay una serie de estilos que puedes usar para CONVERT con XML y algunas explicaciones sobre ellos.

+4

+1 esto es probablemente el error más difícil en la historia de SQL XML entero: mezclar declaraciones de codificación explícitas con la codificación implícita forma derivada del tipo de cadena (ASCII o Unicode). Ningún mortal tiene ninguna posibilidad contra este ... –

+1

¡Funciona muy bien, muchas gracias! – wonea

18

Solo necesita incluir N delante de su cadena XML para hacer que sea 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>'); 
+0

Sí, esto es todo lo que me tomó. ¡Muchas gracias! – Richard

0

Esto funcionó para mí sin ningún error:

DECLARE @input XML = '<?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); 
Cuestiones relacionadas