Использование SSIS для извлечения XML-представления данных таблицы в файл - PullRequest
3 голосов
/ 02 февраля 2012

Я пытаюсь использовать SSIS для извлечения XML-представления набора результатов запроса в текстовый файл. Мой запрос в настоящее время успешно извлекает точный вывод XML, который мне нужен, когда я запускаю его в SSMS. Я испробовал каждый трюк, который смог найти, чтобы использовать этот набор результатов в пакете служб SSIS для создания файла.

Использование потока данных для переноса источника OLE в плоский файл не работает, поскольку вывод XML-запроса обрабатывается как TEXT, а SSIS не может отправить TEXT, NTEXT или IMAGE в место назначения файла.

Затем я попытался выполнить задачу SQL, чтобы заполнить пользовательскую переменную, а затем использовать задачу сценария (написанную с использованием C #), чтобы записать содержимое этой пользовательской переменной в выходной файл, но пользовательская переменная всегда пуста. Я не знаю, но я подозреваю, что это опять же, потому что XML обрабатывается как TEXT или IMAGE, а пользовательская переменная не обрабатывает это.

Запрос в этой форме: ВЫБРАТЬ * FROM dataTable ГДЕ dataTable.FIELD = 'Значение' FOR XML AUTO, ROOT ('RootVal')

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

Для меня довольно легко написать консольное приложение, чтобы сделать это в C # 4.0, но ограничения требуют от меня хотя бы доказать, что это НЕ МОЖЕТ быть сделано с помощью SSIS, прежде чем я напишу консольное приложение и планировщик. *

Ответы [ 2 ]

4 голосов
/ 02 февраля 2012

Извините, что испортил, но есть опция SSIS для вас: Экспорт преобразования столбца .

Я определил запрос OLE DB с помощью

SELECT
    *
FROM
(
    SELECT * FROM dbo.spt_values FOR XML AUTO, ROOT('RootVal')
) D (xml_node)
CROSS APPLY
(
    SELECT 'C:\ssisdata\so_xmlExtract.xml'
) F (fileName)

Это приводит к1 строка и 2 столбца в потоке данных.Затем я прикрепил Преобразование столбца экспорта и связал его с xml_node как Извлечь столбец и fileName как Столбец пути к файлу

В основном усеченные результаты следуют

<RootVal>
    <dbo.spt_values name="rpc" number="1" type="A  " status="0"/>
    <dbo.spt_values name="dist" number="8" type="A  " status="0"/>
    <dbo.spt_values name="deferred" number="8192" type="V  " low="0" high="1" status="0"/>
</RootVal>

Более подробный ответ с картинками доступен в этом разделе вопросов и ответов Экспорт Varbinary (max) столбца с ssis

1 голос
/ 03 октября 2013

Ответ BillInKC - лучший из всех, что я когда-либо видел, но SQL можно упростить (нет необходимости в перекрестном применении):

SELECT X.*, 'output.xml' AS filename
FROM (SELECT * FROM #t FOR XML PATH('item'), ROOT('itemList')) AS X (xml_node)

Он выведет ту же структуру:

xml_node                                           filename
-------------------------------------------------- ----------
<itemList><item><num>1000</num></item></itemlist>  output.xml

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