Набор данных SQL с произвольным количеством столбцов (службы интеграции SQL Server [SSIS])

#c# #sql-server #ssis #dataflow

#c# #sql-сервер #ssis #поток данных

Вопрос:

Предыстория:

Я пытаюсь перебрать список файлов .sql, выполнить каждый файл, сохранить результат каждого запроса в текстовый файл со специальным именем и разделителями. Прямо сейчас я достигаю этого, используя полностью автономную программу на C #. Я новичок в SSIS, но я очень хорош в C #. В дальнейшем в ИТ-отделе, в котором я буду работать, SSIS является предпочтительным решением, поэтому перенос всего этого в действие гигантского скрипта (к сожалению) не является решением.

Проблема:

Ниже приведена картина моего потока управления.

Поток управления

Желаемый эффект заключается в следующем:

  1. Foreach перебирает папку с файлами .sql.
  2. Задача Load SQL присваивает переменной содержимое текущего файла .sql.

    (Оба этих шага работают)

  3. Задача потока данных:

    Поток данных

    1. выполняет SQL в переменной И!
    2. сохраняет результат произвольного размера в переменную или файл.
  4. (Вернемся к потоку управления:) Отсутствует: сохранение отчета с изменяющимся разделителем и изменяющимся именем файла.

  5. Отчет о загрузке выполняет WinSCP, чтобы захватить файл и поместить его в n> 1 назначенных местоположений.

Вопрос:

Как мне сделать так, чтобы поток данных не заботился о количестве столбцов? Например, отчет 1 содержит пять столбцов, отчет 2 — 50, а отчет 3 — 25. Все эти вещи в порядке. Мне все равно, сколько в нем столбцов, и в этом случае мне действительно было бы наплевать на метаданные.

Я могу сделать это с помощью C #, просто сказав: «Вот таблица данных, заполните ее». SSIS, по-видимому, не хватает этой способности адаптироваться к количеству столбцов. Да? Нет? Скажем, вверните это и просто сделайте это с помощью объекта script? Какова полученная мудрость о том, что здесь делать?

Если этот вопрос выявляет какое-то фундаментальное непонимание того, как работает SSIS, не стесняйтесь прокомментировать и это.

Заранее спасибо!

Комментарии:

1. Если вы уже знаете, как это сделать, напишите сценарий. SSIS с произвольными столбцами в 2008 году затруднен. Я не знаю об этой версии.

Ответ №1:

Я бы отказался от всего этого подхода — это не путь к успеху с SSIS.

SSIS кэширует метаданные потока данных (например, столбцы, типы данных, даже точность типов данных), и изменение этих метаданных обычно подразумевает изменение дизайна пакета.

Вместо этого я бы создал пакет SSIS с 3 задачами потока данных или столько, сколько у вас есть вариантов (по одному на «Отчет» / SQL script). Внутри каждой задачи потока данных будет источник OLE DB и назначение плоского файла.

Сила этого становится очевидной во время выполнения — SSIS может выполнять множество задач потока данных параллельно (по умолчанию установлено # ядер * 2) и выводит данные текстового файла с невероятной скоростью по сравнению с C #.