SSIS Foreach循环容器动态文件名和路径,然后解压缩文件

时间:2014-03-26 20:34:47

标签: ssis foreach-loop-container

我有一个文件夹,其中有多个文件名为

P04_20140326_1234.zip
P04_20130324_58714.zip
P04_20130808_jurhet.zip
P04_20130815_85893.zip
etc

名称格式为P04_systemdate _ * .zip。

我想在名称中选择包含currentdate的文件夹并首先将其解压缩,然后将提取文件中的数据加载到table.eg:名为A.txt的文件进入表A,将文件名作为B进入表B并且等......

1 个答案:

答案 0 :(得分:12)

我猜你已经做了以下事情:

  1. 添加Data Flow
  2. 在数据流中添加flat file sourceOle_DB destination
  3. flat file source配置为指向其中一个文件并连接所有相应的列,以便数据从文件流向数据库。
  4. 如果所有这些都已经有效,那么让我们进行For-Each循环

    1. 创建一个变量(默认为包根级别)并将其命名为string {/ li>类型的CsvFileName
    2. 添加ForEach loop(不是For循环)
    3. 将循环类型更改为Foreach File Enumerator
    4. 设置文件夹路径并查找* .csv
    5. 在Variable mappings下,添加变量“User :: CsvFileName”变量,并将索引设置为0 - 这意味着从Foreach循环返回的所有文件名都将显示在变量中。
    6. 在连接管理器(底部)中右键单击FlatFileSource,然后选择属性
    7. DelayValidation设为“True”
    8. 单击“表达式”,然后单击省略号
    9. ConnectionString属性设置为使用“CsvFileName”变量
    10. 运行它。这应该加载所有文件。现在,如果你只是想把它限制在一个日期,那就是你做的事情:

      1. 创建一个名为“FilterDate”的变量
      2. 将值设置为您要设置的日期(例如,20140322)
      3. 在ForEach循环中,转到“集合”,然后单击“表达式”,然后单击省略号
      4. 将FileSpec属性设置为"*" + @[User::FilterDate] + "*.csv"
      5. 现在它只会过滤你想要的文件。