Bonjour, j'essaie d'insérer des données XML dans une table sur SQL Server 2008. Cependant, cette erreur persiste.
Analyse XML: ligne 1, caractère 39, impossible de basculer le codage
La colonne de base de données filemeta utilise le type de données XML et j'ai basculé le codage sur UTF-16, ce qui est selon moi nécessaire pour ajouter des données 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>');
Au secours, je suis coincé.
NB: J'ai créé le XML avec XMLTextWriter.
Oui, vous rencontrez des problèmes lorsque vous essayez d'insérer XML dans SQL Server 2008 et que XML contient une ligne d'instructions de codage.
En général, je me débrouille en utilisant la fonction CONVERT
qui me permet de demander à SQL Server de sauter ces instructions - utilisez quelque chose comme ceci:
INSERT INTO testfiles
(filename, filemeta)
VALUES
('test.mp3', CONVERT(XML, N'<?xml version="1.0" encoding="utf-16" standalone="yes"?>......', 2));
Cela m'a certainement aidé à intégrer divers éléments XML codés dans SQL Server.
Reportez-vous à la documentation relative à MSDN sur CAST et CONVERT - un peu plus bas, vous trouverez un certain nombre de styles que vous pouvez utiliser pour CONVERT
avec XML
et quelques explications à leur sujet.
Vous devez simplement inclureNdevant votre chaîne XML pour le rendre 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>');
Cela a fonctionné pour moi sans aucune erreur:
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);