Команда OLE DB Тип вывода DT_NTEXT и ввод XML - PullRequest
3 голосов
/ 27 сентября 2019

Я работаю над потоком данных служб SSIS, как показано на рисунке ниже.Вот подробные сведения о потоке.

  1. Получение некоторых записей.
  2. Добавление фиктивного столбца типа DT_NTEXT
  3. Это команда OLE DB, которая выполняетсяхранимая процедура.Вывод хранимой процедуры - XML, но имеет тип NVARCHAR (MAX).Выходные данные заполняют фиктивное поле.
  4. Запись XML из фиктивного столбца в таблицу.

Когда пакет выполняется, целевая БД заполняется только символом <вместополного XML.Если я изменяю фиктивный столбец на тип WSTR, XML успешно записывается в таблицу полностью.Мне нужно записать XML в поле NVARCHAR (MAX), так как XML может быть большим и превышать пределы типа WSTR. </p>

Кто-нибудь знает, что происходит и как я могу написать свойXML в поле NVARCHAR (MAX)?

SSIS package

1 Ответ

1 голос
/ 29 сентября 2019

После многих экспериментов и поиска в Интернете, похоже, что это проблема SSIS, поскольку команда OLE DB не может быть сопоставлена ​​с DT_NTEXT столбцами:

В качестве обходного пути вы можете использовать компонент Script для получения значения XML с помощью параметризованного SQLCommand и отобразить вывод в столбец вывода (нет необходимостисоздать столбец, используя преобразование производного столбца).


Обновление 1

При поиске я обнаружил, что это была открытая проблема на форумах Microsoft:

Служба поддержки Microsoft предоставила следующие отзывы:

OLEКлиенты БД обрабатывают столбцы XML (которые не являются частью спецификации OLE DB, но специфичны для SQL) так же, как и поля NTEXT.Поставщик OLE DB для задачи SQL в настоящее время не полностью поддерживает поля больших объектов. Если вы сохраните результат в переменной Object, он вернет COM-объект, который указывает на поток данных, но не фактические результаты (которые не являютсяочень полезно).

Есть несколько способов решения этой проблемы.

1) Приведите результаты к varchar и используйте строковую переменную
2) Используйте соединение ADO.NETвместо OLE DB

Учитывая объем работы, связанной с изменением / исправлением текущего поведения, и наличие доступных обходных путей, мы решили не исправлять эту проблему в этом выпуске.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...