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

use*_*034 5 ssis foreach-loop-container

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

P04_20140326_1234.zip
P04_20130324_58714.zip
P04_20130808_jurhet.zip
P04_20130815_85893.zip
etc
Run Code Online (Sandbox Code Playgroud)

名称格式为P04_systemdate _*.zip.

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

Raj*_*ore 12

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

  1. 添加一个 Data Flow
  2. 在数据流内,添加一个flat file source,和Ole_DB destination
  3. 将其配置flat file source为指向其中一个文件并连接所有相应的列,以便数据从文件流向数据库.

如果所有这些都已经起作用,那么让我们做For-Each循环

  1. 创建一个变量(默认为包根级别)并将其命名CsvFileName为string类型
  2. 添加一个ForEach loop(不是For循环)
  3. 将循环类型更改为a Foreach File Enumerator
  4. 设置文件夹路径并查找*.csv
  5. 在Variable mappings下,添加变量"User :: CsvFileName"变量,并将索引设置为0 - 这意味着从Foreach循环返回的所有文件名都将显示在变量中.
  6. 在Connection Managers(底部)中右键单击FlatFileSource,然后选择属性
  7. 设置DelayValidation为"True"
  8. 单击"表达式",然后单击省略号
  9. ConnectionString属性设置为使用"CsvFileName"变量

运行.这应该加载所有文件.现在,如果你只想将它限制在某个日期,那就是你所做的:

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

现在它只会过滤您想要的文件.