Как я могу использовать контейнер цикла foreach в SSIS для итерации по многомерному массиву?

У меня есть пакет служб SSIS, который обновляет пару таблиц, используя сценарии, и контейнер foreach, а также пару других вещей. Я используюSqlConnection а такжеSqlCommand чтобы вызвать этот запрос в скриптовой задаче перед контейнером foreach:

SELECT TOP 10 DirectoryID, DirectoryPath FROM ProjectDirectory ORDER BY LastAudit

и используюSqlDataReader, чтобы добавить их в многомерный массив [10,2]. Я назначаю массив переменной объектаDirectoryL,ist чтобы я мог перебирать его в контейнере цикла foreach. Это должно выглядеть как {{"1", "C: \ Folder1"}, {"2", "C: \ Folder2"}, ...} Я считаю.

Проблема в том, что я только начал использовать это программное обеспечение пару дней назад, и меня смущает то, как контейнер цикла foreach проходит черезDirectoryList переменная. На данный момент на вкладке коллекции контейнера у меня установлен Enumerator в Foreach From Variable Enumerator, а переменная установлена в User::DirectoryList. У меня есть переменныеUser::DirectoryID установлен на индекс 0 иUser::DirectoryPath установлен в индекс 1. Я пытаюсь заставить его проходить через только верхний уровень массива, чтобы в каждом цикле переменные ID и пути присваивались «1» и «C: \ Folder1», а затем в следующий раз, когда он проходит через цикл, им назначаются «2» и «C: \ Folder2» и т. д. У меня есть компонент сценария, который использует путь для поиска некоторой информации, и я использую идентификатор для обновления правильной строки sql table.

Для отладки мне нужно показать идентификатор и путьMessageBox.Show(Variables.DirectoryID + ", " + Variables.DirectoryPath) первой итерации, и она показывает "8, 8". 8 соответствует идентификатору строки, которая должна отображаться первой. В следующий раз, когда он проходит, он дважды дает мне правильный путь, "C: \ Folder1, C: \ Folder1". Таким образом, очевидно, что отображение переменных не работает, оно отображает обе переменные в один и тот же индекс. В любом случае это не работает, поэтому я думаю, что либо (а может и то и другое?) Не следует выбирать перечислитель Foreach From Variable, или я не могу использовать многомерный массив в контейнере foreach. Я искал и ничего не нашел, и это все может быть трудно понять, но есть предложения?

Ответы на вопрос(1)

Решение Вопроса

на самом деле тебе не нужно так поступать. Поскольку ваш источник представляет собой запрос t-sql, вы могли бы запустить его с помощью «выполнить задачу sql». Но это нормально, это можно сделать и так. На самом деле я сейчас работаю над пакетом, который получает набор результатов в таблицу данных для задачи сценария и загружает его в переменную объекта, как вы делаете это с помощью вашего DirectoryList.

Чтобы прочитать значения, просто настройте ваш цикл следующим образом, где переменная является переменной Object:

и на вкладке сопоставлений, например: где переменная - это переменная пакета, в которую нужно поместить значение первого столбца (индекс 0). У вас может быть столько индексов, сколько столбцов в наборе результатов.

и все, внутри вашего цикла у вас будет доступ к вашим переменным с текущими значениями

 Bradley Oesch24 мая 2012 г., 18:44
Отличное спасибо! В итоге я вместо этого использовал задачу «Выполнение SQL», потому что, как вы сказали, это действительно все, что делал скрипт. Сейчас я просто пытаюсь выяснить, как передать переменную DateTime в другую задачу «Выполнение SQL» и обновить одну строку в таблице. Я погуглю, спасибо!

Ваш ответ на вопрос