循环文件夹的SSIS包开始使用最旧的文件

时间:2016-07-25 21:29:40

标签: ssis ssis-2012

我看到了类似的问题,但没有解决我的具体需求。我有一个SSIS包,其中包含一个带文件枚举器的For Each循环和一个匹配日期时间的文件的模式匹配,如下所示:

bookreview_daily _ * .txt

匹配一个文件,例如:

bookreview_daily_2016_06_30.txt。目前,我必须从最早的日期开始逐个处理每个文件。我希望能够遍历文件夹并处理每个文件,从最旧的文件开始。如果我有以下文件:

bookreview_daily_2016_06_30.txt

bookreview_daily_2016_07_01.txt

bookreview_daily_2016_07_02.txt

首先应处理名为bookreview_daily_2016_06_30.txt的文件,然后处理文件bookreview_daily_2016_07_01.txt,然后将bookreview_daily_2016_07_02.txt作为要处理的最后一个文件。是否有一种干净,有效的方法来实现这一目标?

  • 马特

3 个答案:

答案 0 :(得分:0)

我们可以使用脚本任务来实现这一目标。

  1. 在脚本任务中使用c#或vb.net代码获取目录中存在的文件列表。
  2. 然后对它们进行排序,然后将排序后的数据存储在对象变量中。
  3. 然后在For Each Loop容器中传递对象变量。
  4. 不会根据排序循环遍历文件。
  5. 我们也可以在脚本中使用数组概念来实现它。

答案 1 :(得分:0)

这可以使用SSIS的脚本任务转换来实现。

正如上面的用户指出逻辑的关键是读取文件名,获取集合中的datetime部分和完整文件名,对集合进行排序,然后将其分配给对象变量。在Foreach循环变换中使用此变量以按所需顺序读取文件。

我已经创建了一篇博文,其中包括博客文章中所需的逻辑 - Reading DateTime Stamped flat files进一步详细说明。

答案 2 :(得分:0)

如果要不使用脚本任务就可以实现这一点,请尝试以下步骤。

  1. 使用FilePath,SortingValue列创建一个表。
  2. 浏览foreachloop容器中的所有文件,并存储以下文件的完整文件路径: 表格中的每个文件。
  3. 使用一些SQL函数并为每行(每个文件)分配值。根据您的输入 日期和字符串函数的组合将帮助您识别排序。
  4. 现在再次使用foreachloop容器基于SortingValue列循环表。 对于每个循环,您都可以获取文件路径并将其用于平面文件连接 动态地