Подтвердить что ты не робот

INSERT XML в базу данных SQL Server 2008

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

Разбор 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: Я создал XML с XMLTextWriter.

4b9b3361

Ответ 1

Да, есть проблемы при попытке вставить 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 и некоторые пояснения о них.

Ответ 2

Вам просто нужно включить 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>');

Ответ 3

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

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