2011-12-02 65 views
0

我有一个每日转储7或8个.xls文件的文件夹。在所有这些文件中,我只需要加载2个具有特定名称的文件。ABC_datestamp.xls和XYZ_datestamp.xls。加载最近7天在SSIS中具有特定名称的文件

问题是我无法隔离这两个文件名,因为在同一个文件夹中有太多其他文件。第二个挑战是我的经理希望我一次加载上周的所有文件,这意味着我必须专门加载最近7天内的文件。

现在我将这些特定的7个文件复制到一个文件夹,然后使用每个循环容器加载它。

无论如何,我可以使用脚本任务来生成文件名,如ABC_02-Dec-2011.xls,ABC_01-Dec-2011.xls,ABC_30-Nov-2011.xls .......最近7天的文件并将其作为变量传递给数据流任务?

有什么更好的建议吗?

我知道很多人都问过类似的问题,但我是SSIS的新手,无法找到很好的答案。

非常感谢..

回答

2

而不是尝试并建立所有可能的文件名列表,我在文件夹中的所有文件就不断循环,并使用脚本任务,以确定哪些文件来进一步处理。

控制流程是这样的: '正是如此设定s变量映射: screenshot of foreach loop container settings

SCR_SetProcessFileFlag' screenshot of foreach loop container

FELC_InputFolderContents的配置: screenshot of script task settings

SCR_SetProcessFileFlag“的剧本,像这样:

public void Main() 
    { 
     string targetFileFullPath = (string)Dts.Variables["User::TargetFileFullPath"].Value; 
     string targetFileName = Path.GetFileName(targetFileFullPath); 
     Dts.Variables["ProcessFileFlag"].Value = IsValidFileName(targetFileName); 
     Dts.TaskResult = (int)ScriptResults.Success; 
    } 

    private bool IsValidFileName(string targetFileName) 
    { 
     bool result = false; 
     if (Path.GetExtension(targetFileName) == "xls") 
     { 
      string fileNameOnly = Path.GetFileNameWithoutExtension(targetFileName); 
      if (fileNameOnly.Substring(0, 4) == "ABC_" || fileNameOnly.Substring(0, 4) == "XYZ_") 
      { 
       string datePart = fileNameOnly.Substring(4); 
       DateTime dateRangeStart = DateTime.Today.AddDays(-7); 
       DateTime dateRangeEnd = DateTime.Today; 
       DateTime fileDate; 
       if (DateTime.TryParse(datePart, out fileDate)) 
       { 
        if (dateRangeStart <= fileDate && fileDate <= dateRangeEnd) 
        { 
         result = true; 
        } 
       } 
      } 
     } 
     return result; 
    } 

SCR_SetProcessFileFlagDTT_ProcessSelectedFile之间的优先约束正是如此配置: screenshot of precedence constraint settings

(显然,对于IsValidFileName特定逻辑取决于特定的要求。)

0

示例下面的链接介绍了如何通过一个文件夹中的某一个月匹配的文件和归档文件循环。在这个例子中,该文件被命名为myfile 20-08-2011myfile 13-09-2011,根据当月值,这些文件,然后移动到备份文件夹月份名称一样AugustSeptember

的例子只是存档的文件。如果你想加载数据,那么你需要放置一个数据流任务。在Foreach循环容器中。

如果通过该示例,您将会想到解决您的问题。

How do I create a package that would copy all files from a given folder into a new folder?

下面是示出了通过夹如何循环并加载Excel文件数据到数据库中的一例。

How to import Excel files with different names and same schema into database?

相关问题