Вставить XML в базу данных SQL Server 2008 - PullRequest
25 голосов
/ 02 сентября 2010

Здравствуйте, я пытаюсь вставить некоторые данные XML в таблицу на SQL Server 2008. Однако я получаю эту ошибку;

Синтаксический анализ XML: строка 1, символ 39, невозможно переключитьсякодировка

Файл мета-столбца базы данных использует тип данных XML, и я переключил кодировку на UTF-16, который, я считаю, необходим для добавления данных XML.Помогите, я застрял.

Примечание: я создал XML с XMLTextWriter.

Ответы [ 3 ]

32 голосов
/ 02 сентября 2010

Да, существуют проблемы, когда вы пытаетесь вставить 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.

См. MSDN документы по CAST и CONVERT - немного вниз по странице есть несколько стилей, которые вы можете использовать для CONVERT с XML и некоторые пояснения по ним.

18 голосов
/ 02 сентября 2010

Вам просто нужно включить N перед строкой XML, чтобы сделать ее 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>');
1 голос
/ 05 апреля 2017

Это сработало для меня без ошибок:

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