web-dev-qa-db-fra.com

INSERT XML dans la base de données SQL Server 2008

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.

24
wonea

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.

30
marc_s

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>');
18
Joe Stefanelli

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