web-dev-qa-db-ja.com

SQL Server 2008データベースへのXMLの挿入

こんにちは、SQL Server 2008のテーブルにXMLデータを挿入しようとしています。ただし、このエラーがスローされ続けます。

XML解析:行1、文字39、エンコードを切り替えることができません

データベース列filemetaはXMLデータ型を使用しており、エンコードをUTF-16に切り替えました。これは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>');

ヘルプ、私は立ち往生しています。

NB:XMLTextWriterでXMLを作成しました。

27
wonea

はい、XMLをSQL Server 2008に挿入しようとすると、XMLにエンコード命令行が含まれる場合に問題があります。

通常、CONVERT関数を使用して回避します。これにより、SQL Serverにこれらの命令をスキップするように指示できます。次のようなものを使用します。

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

さまざまなエンコードされたXMLをSQL Serverに取り込むのに役立ちました。

CASTおよびCONVERTのMSDNドキュメント を参照してください-ページの少し下に、CONVERTXMLで使用できるスタイルとその説明がいくつかあります。

33
marc_s

ユニコードにするには、XML文字列の前に[〜#〜] n [〜#〜]を含めるだけです。

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

これはエラーなしで私のために働いた:

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