2010-09-02 17 views
22

Hallo Ich versuche, einige XML-Daten in eine Tabelle in SQL Server 2008 einzufügen. Allerdings habe ich immer wieder diesen Fehler geworfen;XML in SQL Server 2008-Datenbank einfügen

XML-Analyse: Zeile 1, Zeichen 39, nicht in der Lage, die Codierung zu wechseln

Die Datenbankspalte filemeta verwendet den XML-Datentyp, und ich habe wechseln die Kodierung UTF-16, die ich glaube, ist notwendig für das Hinzufügen von XML-Daten.

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>'); 

Hilfe, ich stecke fest.

Hinweis: Ich habe das XML mit XMLTextWriter erstellt.

Antwort

28

Ja, beim Versuch, XML in SQL Server 2008 einzufügen, gibt es Probleme, und das XML enthält eine Codierungsbefehlszeile.

ich normalerweise um mit der CONVERT Funktion, die mir SQL Server anweisen, können diese Anweisungen überspringen - so etwas wie folgt verwenden:

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

Es hat mir verschiedene verschlüsselte XML Sachen in SQL Server auf jeden Fall erhalten geholfen.

Sehen Sie die MSDN docs on CAST and CONVERT - ein wenig auf der Seite gibt es eine Reihe von Stilen, die Sie für CONVERT mit XML und einige Erklärungen über sie verwenden können.

+4

+1 dies ist wahrscheinlich der schwierigste Fehler in ganzer SQL XML-Geschichte: explizite Codierungsdeklarationen mit impliziter Codierung abgeleitete Form des String-Typ (ASCII Mischen oder Unicode). Kein Sterblicher hat eine Chance gegen diesen ... –

+1

Works beautiful vielen Dank! – wonea

18

Sie müssen nur N vor Ihrer XML-Zeichenfolge einfügen, um es Unicode zu machen.

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

Yup, das ist alles was ich brauchte. Danke vielmals! – Richard

0

Das funktionierte für mich ohne Fehler:

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);