Inserte XML en la base de datos SQL Server 2008
-
26-09-2019 - |
Pregunta
Hola, estoy tratando de insertar algunos datos XML en una tabla en SQL Server 2008. Sin embargo, sigo siendo lanzado este error;
Analización de XML: línea 1, carácter 39, incapaz de cambiar la codificación
La columna de la base de datos FileMeta utiliza el tipo de datos XML, y he cambiado 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.
Solución
Sí, hay problemas cuando intenta insertar XML en SQL Server 2008 y el XML contiene una línea de instrucciones de codificación.
Por lo general, uso el CONVERT
Función que me permite instruir a SQL Server para omitir esas instrucciones: use algo como esto:
INSERT INTO testfiles
(filename, filemeta)
VALUES
('test.mp3', CONVERT(XML, N'<?xml version="1.0" encoding="utf-16" standalone="yes"?>......', 2));
Definitivamente me ha ayudado a obtener varias cosas de XML codificadas en SQL Server.
Ver el MSDN documentos en el elenco y la conversión - Un poco en la página hay varios estilos para los que puede usar CONVERT
con XML
Y algunas explicaciones sobre ellos.
Otros consejos
Solo necesitas incluir norte Frente a su cadena XML para hacerlo 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>');
Esto funcionó para mí sin ningún error:
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);