2012-02-01 3 views
3

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

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

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

Запрос в таком виде: SELECT * ОТ Datatable ГДЕ dataTable.FIELD = 'Значение' FOR XML AUTO, ROOT ('RootVal')

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

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

+1

было бы полностью разгромив точку упражнения, чтобы сделать все это в задаче сценария? Если это можно сделать в консольном приложении, это можно сделать в задаче скрипта ... – GarethD

ответ

3

Извините, что испортил, но для вас есть опция SSIS: Export Column Transformation.

Я определил запрос 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 столбцов в потоке данных. Затем я прикрепил Transformation Экспорт Column и проводной его с xml_node в Extract Колонка и 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> 

Более подробный ответ, с фотографиями, можно получить по этому вопросу Q & A Export Varbinary(max) column with ssis

+0

Работает как шарм. Наверное, самое неинтуитивное решение когда-либо, но я рад, что кто-то знал, как это сделать. – urbadave

+0

Вопрос и этот ответ касаются того, как экспортировать данные XML в плоский файл. Не фиксируйте поставленный запрос и как его можно переписать. Он существует просто, чтобы дать будущим читателям воспроизводимую контрольную точку. ОП не предоставил запрос, поэтому он существует в качестве замены. – billinkc

0

Ответ 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) 
+0

Неужели неудачный downvoter попробовал запрос безуспешно? В чем проблема? – ajeh

Смежные вопросы