Я создаю пакет SSIS, где мне нужно перебирать некоторые из выбранной папки, и я хочу сохранить имена папок в массиве, чтобы отслеживать папки, которые я обработано. Могу ли я хранить массив в пакете SSIS и продолжать добавлять значение в этот массив?SSIS-пакет: сохранить значение переменной цикла для цикла в массиве
ответ
Вы можете сохранить значение переменной цикла for в массиве. Это немного грязная ИМО. Вероятно, существует более чистый подход с использованием функциональности SSIS «из коробки», предлагаемой @billinkc. Однако, вот некоторые указатели ...
Пойдем со своим сценарием, где у вас есть для каждого цикла, который выполняет итерацию по некоторым файлам (с использованием Foreach File Enumerator
), и вы хотите сохранить имена папок в массиве.
Вот некоторые переменные, которые мы будем использовать:
FolderList
будет массив и CurrentFile
будет для переменной цикла. Пакет в своей простейшей форме может выглядеть следующим образом:
В задаче сценария, код может выглядеть следующим образом. Я решил использовать List<string>
как мой тип массива, но вы могли бы использовать что-то еще, например ArrayList
. (Примечание: вам нужно добавить, используя операторы для System.Collections.Generic
и System.IO
для кода ниже):
public void Main()
{
//get current directory
string directory = Path.GetDirectoryName(Dts.Variables["User::CurrentFile"].Value.ToString());
List<string> lst = new List<string>();
// if the FolderList is already a List<string> then set set it to lst
if ((Dts.Variables["User::FolderList"].Value is List<string>))
{
lst = (List<string>)Dts.Variables["User::FolderList"].Value;
}
// if the directory isn't in the list yet, then add it to the list
if(!lst.Contains(directory))
{
lst.Add(directory);
}
// update our variable with the List<string>
Dts.Variables["User::FolderList"].Value = lst;
Dts.TaskResult = (int)ScriptResults.Success;
}
Каждый раз, когда Script Task
выполняется, вы получите новую папку добавляется в массив. После выполнения каждого цикла вы можете проверить значения массива. Вы можете сделать это с помощью Script Task
(подобно тому, что мы делали выше):
List<string> lst = (List<string>)Dts.Variables["User::FolderList"].Value;
// do stuff with lst
Вы также можете перебирать значения в массиве, используя для каждого цикла (используйте Foreach From Variable Enumerator
), который я только что узнал, как я шел через это (спасибо!). Просто установите переменную для перечисления на вашу переменную массива (здесь FolderList
) и укажите другую переменную (например, CurrentFolder
) как индекс 0 в переменных. Это работало для List<string>
, но я не уверен, с какими другими типами коллекций он будет работать.
Спасибо большое, что было полезно ... Я хочу дать +1, но я только начал с переполнения стека !! Спасибо anyways –
Спасибо .. это было полезно –
- 1. Сохранить для значения цикла в массиве
- 2. для цикла печати значение вне цикла и сохраняющим значение переменной
- 3. хранить значение цикла в массиве
- 4. Как сохранить значение переменной цикла for при завершении цикла?
- 5. значения в массиве для цикла
- 6. Bash: сохранить значение переменной после цикла
- 7. Установка переменной значение для цикла
- 8. Сохранить для результата цикла в переменной
- 9. Как сохранить и использовать значение пакетного файла для переменной цикла
- 10. Значение цикла Vb.net, хранящееся в массиве
- 11. Как сохранить значение внутреннего цикла for в вложенном цикле цикла в массиве в Matlab?
- 12. Как сохранить значение максимального числа в массиве до повторения цикла?
- 13. Для цикла, возвращающего правильное значение после цикла
- 14. Как сохранить значение переменной цикла в setTimeout? Javascript
- 15. Как сохранить текущее значение массива в переменной внутри цикла Perl
- 16. Передать значение переменной вне цикла
- 17. Значение приращения переменной цикла coldfusion
- 18. Значение переменной цикла меняется внезапно
- 19. Я хочу сохранить значение переменной в java за пределами цикла
- 20. Для цикла, сохранить переменную
- 21. Как использовать другое значение переменной для цикла
- 22. Для цикла с переменной переменной
- 23. Значение переменной цикла после цикла «for in» в Objective C
- 24. ZSH для переменной переменной решетки цикла
- 25. PHP для переменной цикла
- 26. Для цикла добавления переменной
- 27. Сохраните последнее значение цикла
- 28. Изменение для цикла цикла для цикла
- 29. передать значение переменной изнутри цикла в внешнее
- 30. Изменение переменной вне цикла for из цикла
Да, но, возможно, вы могли бы лучше объяснить, что вы делаете. Существуют встроенные средства для перечисления в папке и отслеживания посещаемости, поэтому я беспокоюсь о том, что вы изобретаете колесо. – billinkc
Большое спасибо за ваш ответ. Поэтому я стараюсь сделать следующие шаги: 1. получение файлов и их перемещение в соответствующую папку даты в соответствии с именем файла 2. Поскольку существует много существующих ранее папок с датами, поэтому мне нужно отслеживать папку с датой, в которой я перемещаю файл для дальнейшей обработки. 3. Теперь мне нужно запустить инструмент только в тех папках, где я переместил файл. Мое первоначальное предположение состояло в том, чтобы сохранить объект SSIS и добавить имя папки даты при итерации через цикл for for, но я не могу добавить несколько строк в пакет SSIS в виде массива. –
Если вы на самом деле не делаете никаких манипуляций с данными, я бы предложил сделать это в автономном скрипте вместо SSIS –