Возможно, вы уже нашли ответ на свой вопрос. Это для других пользователей, которые могут наткнуться на этот вопрос. Следующий пример показывает, как это может быть достигнуто динамически для любого количества Сайтов, которые могут присутствовать. Пример был создан с использованием SSIS 2008 R2
с SQL Server 2008 R2
базой данных.
Выполните сценарии, приведенные в разделе «Сценарии SQL» в базе данных SQL Server, чтобы создать таблицу с именем dbo.Source
и заполнить данными (аналогично данным, приведенным в вопросе). Он также создает хранимую процедуру с именем dbo.GetSiteData
.
В соединении пакета служб SSIS создайте соединение OLE DB для соединения с SQL Server. Мы подключимся к Excel позже на этих шагах.
В пакете служб SSIS создайте 6 переменных, как показано на скриншоте # 1 . Заполните переменную Site значением Template
, это примерное значение, которое будет использоваться для оценки других выражений. Установите переменную SQLUniqueSites со значением SELECT DISTINCT Site FROM dbo.SourceData
. Установите переменную ExcelFolder со значением C:\temp\
Выберите переменную ExcelFilePath и нажмите F4
, чтобы просмотреть свойства. Измените свойство EvaluateAsExpression на True
и установите свойство Выражение со значением @[User::ExcelFolder] + @[User::Site] + ".xls"
. Смотрите скриншот # 2 .
Выберите переменную ExcelSheet и нажмите F4
для просмотра свойств. Измените свойство EvaluateAsExpression на True
и установите свойство Выражение со значением, указанным в Значение переменной ExcelSheet . Смотрите скриншот # 3 .
На вкладке Поток управления пакета служб SSIS поместите Execute SQL Task
и настройте его, как показано на скриншотах # 4 и # 5 . Эта задача будет получать уникальные имена сайтов.
На вкладке Поток управления пакета служб SSIS поместите Foreach Loop container
после задачи «Выполнение SQL» и настройте контейнер «цикл по каждому элементу», как показано на снимках экрана # 6 и # 7 Этот цикл перебирает набор результатов и считывает каждый сайт в переменную. Затем эта переменная используется для предоставления имени файла Excel, а также параметра хранимой процедуры в задаче потока данных, которая будет добавлена в ближайшее время.
Внутри контейнера цикла по каждому элементу поместите Execute SQL Task
, а затем поместите Data Flow Task
. На этом этапе вкладка «Поток управления» должна выглядеть так, как показано на скриншоте # 8 . Ваш пакет может показывать ошибки на этом этапе, мы исправим это в ближайшее время на следующих шагах. Мы настроим задачу потока данных и вернемся к задаче «Выполнение SQL» в контейнере цикла по каждому элементу.
Внутри задачи потока данных поместите OLE DB Source
и настройте его, как показано на скриншотах # 9 и # 11 . Это позволит получить данные из таблицы на основе данного сайта. Нажмите кнопку Параметры ... , чтобы установить параметры запроса.
Если типы данных поля таблицы имеют формат VARCHAR, то нам необходимо преобразовать его в NVARCHAR (формат Unicode), в противном случае этот шаг не требуется. В задаче «Поток данных» поместите преобразование Data Conversion
после источника OLE DB и настройте его, как показано на снимке экрана # 12 .
Далее, внутри Задачи потока данных, поместите пункт назначения Excel, нажмите первую кнопку New ..., как показано на скриншоте # 13 .
В диалоговом окне «Диспетчер соединений Excel» укажите путь к файлу Excel и нажмите «ОК». Смотрите скриншот # 14 . Вернувшись в пункт назначения Excel, нажмите вторую кнопку New ..., как показано на скриншоте # 15 . В диалоговом окне «Создать таблицу» убедитесь, что сценарий показан на снимке экрана # 16 , и нажмите кнопку «ОК». При отображении с предупреждением, как показано на скриншоте # 17 , нажмите OK. Выберите значение Template
в раскрывающемся списке Имя листа Excel , как показано на снимке экрана # 18 . Настройте столбцы, как показано на скриншоте # 19 .
В диспетчере соединений пакета служб SSIS выберите вновь созданный диспетчер соединений Excel и нажмите F4, чтобы просмотреть свойства. Измените значение свойства Name на Excel
. Измените DelayValidation на True
, чтобы, если файл Template.xls не существовал, вы не получали сообщение об ошибке. Установите выражение ServerName со значением @[USer::ExcelFilePath]
. Смотрите скриншот # 20 . NOTE:
Файл Excel должен быть создан по пути C: \ temp \ Template.xls. Возможно, вы захотите сохранить его, чтобы не встретить во время будущих изменений дизайна. Вы все еще можете восстановить его, если файл удален.
Вернитесь в пункт назначения Excel и настройте его, как показано на скриншоте # 21 . После настройки задачи потока данных она должна выглядеть, как показано на скриншоте # 22 * 1157 *.
Вернувшись на вкладку «Поток управления», настройте задачу «Выполнение SQL» в контейнере «цикл по каждому элементу», как показано на снимке экрана # 23 . Эта задача создаст новые таблицы Excel для каждого имени сайта.
Снимок экрана # 24 показывает содержимое в папке c: \ temp \ до выполнения пакета.
Снимки экрана # 25 и # 26 показывают выполнение пакета.
Снимок экрана # 27 показывает содержимое в папке c: \ temp \ после выполнения пакета.
Снимки экрана # 28 и # 29 показывают содержимое вновь созданных электронных таблиц Excel North.xls и South.xls. Оба листа содержат данные о сайтах с одинаковыми именами.
Надеюсь, это поможет.