Вот один из возможных вариантов, которого вы можете достичь с помощью Script Task
. Следующий пример показывает, как это можно сделать. Пример был создан в SSIS 2008 R2.
Пошаговый процесс:
Создайте три папки с именами 2011-0619
, 2011-0626
и 2011-0703
в пути к папке C:\temp\
, как показано на скриншоте # 1 . Запишите значение Date created
каждой из папок.
Поместите несколько файлов в каждую из папок, как показано на скриншотах # 2 - # 4 .
В пакете служб SSIS создайте четыре переменные, как показано на скриншоте # 5 . Установите переменную RootFolder со значением C:\temp\
(в вашем случае это будет c: \ data). Установите переменную FilePattern со значением *.*
. Переменной RecentFolder будет присвоен путь к последней папке в Задаче сценария. Чтобы избежать ошибок времени разработки, присвойте переменной RecentFolder правильный путь к файлу. Переменной FilePath будут присвоены значения, когда файлы будут перебраны в последней папке.
В пакете служб SSIS поместите задачу сценария. Замените метод Main () в Задаче сценария на код задачи сценария, указанный в разделе Код задачи сценария (Получить последнюю папку): . Этот сценарий получает список папок в корневой папке и циклически просматривает дату создания для выбора самой последней созданной папки. Недавно созданный путь к папке сохраняется в переменной RecentFolder .
В пакете служб SSIS поместите контейнер цикла по каждому элементу и настройте его, как показано на скриншотах # 6 и # 7 .
Поместите задачу скрипта в контейнер цикла по каждому элементу. Замените метод Main () в Задаче сценария на код задачи сценария, указанный в разделе Код задачи сценария (Показать имена файлов): . Этот скрипт просто отображает имена файлов в недавно созданной папке.
После настройки всех задач пакет должен выглядеть так, как показано на скриншоте # 8 .
Снимки экрана # 9 - # 11 показывают, что пакет отображает имена файлов в недавно созданной папке 2011-0703 .
Надеюсь, это поможет.
Код задачи скрипта (Получить последнюю папку):
C # код, который можно использовать только в SSIS 2008 и выше .
public void Main()
{
Variables varCollection = null;
Dts.VariableDispenser.LockForRead("User::RootFolder");
Dts.VariableDispenser.LockForWrite("User::RecentFolder");
Dts.VariableDispenser.GetVariables(ref varCollection);
string rootFolder = varCollection["User::RootFolder"].Value.ToString();
DateTime previousFolderTime = DateTime.MinValue;
string recentFolder = string.Empty;
foreach (string subFolder in System.IO.Directory.GetDirectories(rootFolder))
{
DateTime currentFolderTime = System.IO.Directory.GetCreationTime(subFolder);
if (previousFolderTime == DateTime.MinValue || previousFolderTime <= currentFolderTime)
{
previousFolderTime = currentFolderTime;
recentFolder = subFolder;
}
}
varCollection["User::RecentFolder"].Value = recentFolder;
Dts.TaskResult = (int)ScriptResults.Success;
}
Код задачи скрипта (Показать имена файлов):
C # код, который можно использовать только в SSIS 2008 и выше .
public void Main()
{
Variables varCollection = null;
Dts.VariableDispenser.LockForRead("User::FilePath");
Dts.VariableDispenser.GetVariables(ref varCollection);
MessageBox.Show(varCollection["User::FilePath"].Value.ToString(), "File Path");
Dts.TaskResult = (int)ScriptResults.Success;
}
Скриншот №1:
Скриншот № 2:
Скриншот № 3:
Скриншот № 4:
Снимок экрана № 5:
Снимок экрана № 6:
Снимок экрана № 7:
Скриншот № 8:
Снимок экрана № 9:
Снимок экрана № 10:
Скриншот № 11: