Не похоже совсем, впрочем в этом я виноват, предоставил не все данные.
Начну заново:
На IIS из html-формы приходит xml-файл в utf-8, содержащий процессинговую инструкцию (ПИ) <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>, его нужно записать в базу без обращения к файловой системе, поэтому bcp, openrowset и SQLXMLBulkLoad не подходят.
Запись текста в ADODB.Recordset в поле типа XML не удается, в одном случае "произошли ошибки при выполнении многошаговой операции" (со значением этого поля вообще невозможно работать, а рекордсет с таким полем — сохранить на диск), в другом "не удается сменить кодировку" (это было под другим сервером, MSSQL2005).
Запись в поле типа ntext удается, но не удается sp_xml_preparedocument, завершается с той же ошибкой про кодировку:
- Код: Выделить всё
declare @XMLDoc xml, @iDoc int
--[Data] [ntext]
select top 1 @XMLDoc = Data from tblTest
EXECUTE sp_xml_preparedocument @iDoc OUTPUT, @XMLDoc , '<ns1:root xmlns:ns1="http://tempuri.org"/>'
EXECUTE sp_xml_removedocument @iDoc
/*
Сообщение 9402, уровень 16, состояние 1, строка 7
Синтаксический анализ XML: строка 1, символ 56 [i](это ?[u]>[/u])[/i], невозможно переключить кодировку
*/
Если вырезать ПИ, то sp_xml_preparedocument срабатывает, но считает, что текст в кодировке windows-1251.
При этом openrowset загоняет файл с ПИ в xml-поле корректно и без вопросов.
Лучший способ понять что-то самому — объяснить это другому.