SSIS: - 变量fof excel文件名

时间:2017-04-22 12:34:12

标签: sql-server excel ssis etl

我有一个包含多个excel文件的文件夹。 Excel文件名几乎相同,但每个文件名最后都包含月份和年份。

示例

Emp_04_2017.xlsx
Emp_05_2017.xlsx
...

我想创建一个SSIS包,选择当前月份文件并将其插入目标表。

2 个答案:

答案 0 :(得分:1)

一种方法是创建SSIS变量来存储当前月份和年份,然后使用这些变量在第三个变量中构造文件名。

答案 1 :(得分:1)

使用ForEachLoopContainer。

Complete solution

Variable declared

ForEach循环容器将从 FolderPath 变量中选择文件并返回完整的 CompletePath (路径+文件名)。 Loop将遍历 FolderPath 位置中的所有文件。

  1. Foreach循环容器:双击 - >在集合集合表达式目录= FolderPath,枚举器配置 - >文件:(。xlsx)。 可变映射 - >变量(CompletePath)索引0。
  2. EXPR_GetFirstOcrDash:用于在文件名中首次出现破折号的表达式,@ [User :: FirstOcr] = FINDSTRING(REVERSE(@ [User :: CompletePath]),“_”,1)。
  3. EXPR_ExtractFileName:表达式用于从文件名中获取月份,@ [User :: FileMonth] =(REVERSE(SUBSTRING(REVERSE(@ [User :: CompletePath]),@ [User :: FirstOcr] +2 ,1))==“0”? REVERSE(SUBSTRING(REVERSE(@ [User :: CompletePath]),@ [User :: FirstOcr] +1,1)) :REVERSE(SUBSTRING(REVERSE(@ [User :: CompletePath]),@ [User :: FirstOcr] +1,2(2)))
  4. EXPR_SetFileToProcess:用于设置我们找到要处理的文件,@ [User :: FileToProcess] = @ [User :: CompletePath]
  5. EXPR_StopProcessing:循环将连续检查文件夹中的所有文件,当我们找到当前日期的第一个文件时,我们将不再查找文件。 更好的做法是使用两个目录Source和Archive,一旦处理完文件,使用FileSystemTask将处理后的文件移动到Archive目录。
  6. 优先约束在绿色箭头上添加。

    在处理Foreach循环容器之后,您可以使用FileToProcess变量并使用DataFlowTask中的文件。