【问题标题】:Loading last 7 days files with specific names in SSIS在 SSIS 中加载具有特定名称的最近 7 天文件
【发布时间】:2011-12-02 17:19:48
【问题描述】:

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

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

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

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

有更好的建议吗?

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

非常感谢..

【问题讨论】:

    标签: ssis foreach-loop-container


    【解决方案1】:

    我不会尝试构建所有可能文件名的列表,而是遍历文件夹中的所有文件并使用脚本任务来确定要进一步处理的文件。

    控制流程如下所示:

    这样设置FELC_InputFolderContents 的变量映射:

    SCR_SetProcessFileFlag的配置:

    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 之间的优先约束是这样配置的:

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

    【讨论】:

      【解决方案2】:

      以下链接中的示例说明了如何遍历文件夹中的文件并存档与给定月份匹配的文件。在示例中,文件被命名为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?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-21
        • 1970-01-01
        • 2015-05-22
        相关资源
        最近更新 更多