通过检查条件加载SSIS平面文件 我在一个文件夹中有10个平面文件(.dat格式),需要每天按计划时间上传到数据库中 所有与文件相关的信息都存在于数据库中,如文件名、文件路径、表名、列名和分隔符 我们需要检查每个文件是否存在,如果不存在,则需要记录一个条目“未找到文件” 如果文件存在,它需要检查拖车记录(文件中的最后一条记录表示Count=00001000,它必须是该特定文件中记录数的计数) 如果拖车记录不存在,则需要记录一个条目“未找到拖车记录”。如果拖车记录显示为零计数,则必须将日志条目设置为“零计数”,如果文件计数与日志条目不匹配,则需要“计数不匹配” 如果满足所有条件,则需要将每个文件的数据加载到数据库中

通过检查条件加载SSIS平面文件 我在一个文件夹中有10个平面文件(.dat格式),需要每天按计划时间上传到数据库中 所有与文件相关的信息都存在于数据库中,如文件名、文件路径、表名、列名和分隔符 我们需要检查每个文件是否存在,如果不存在,则需要记录一个条目“未找到文件” 如果文件存在,它需要检查拖车记录(文件中的最后一条记录表示Count=00001000,它必须是该特定文件中记录数的计数) 如果拖车记录不存在,则需要记录一个条目“未找到拖车记录”。如果拖车记录显示为零计数,则必须将日志条目设置为“零计数”,如果文件计数与日志条目不匹配,则需要“计数不匹配” 如果满足所有条件,则需要将每个文件的数据加载到数据库中,ssis,Ssis,请提出实施上述方案的想法。谢谢 以下解决方案可能会帮助您解决此问题 将For each循环容器与“Item”枚举器一起使用。因为你有10个文件,如果你需要加薪,那么你应该使用这个。文件枚举器只是遍历文件,不会引发任何错误 以下是步骤 使用变量创建以下SSIS包 文件完整路径 已验证 对于每个循环枚举器,应按照以下屏幕截图进行配置 集合中的配置: 可变部分中的配置 容器内部有一个脚本任务。必须将FileFullPath作为只读变量,将IsValidate作为读写变量,如下屏幕所示 单击编辑脚

请提出实施上述方案的想法。谢谢

以下解决方案可能会帮助您解决此问题

将For each循环容器与
“Item”枚举器一起使用。因为你有10个文件,如果你需要加薪,那么你应该使用这个。文件枚举器只是遍历文件,不会引发任何错误

以下是步骤

使用变量创建以下SSIS包

  • 文件完整路径
  • 已验证
  • 对于每个循环枚举器,应按照以下屏幕截图进行配置

    集合中的配置:

    可变部分中的配置

    容器内部有一个脚本任务。必须将
    FileFullPath
    作为只读变量,将
    IsValidate
    作为读写变量,如下屏幕所示

    单击编辑脚本并插入以下代码

    public void Main()
    {
            Dts.Variables["IsValidated"].Value = true;
    
            string fileFullPath = Dts.Variables["FileFullPath"].Value.ToString();
    
                if (!File.Exists(fileFullPath))
                {
                        var msg = String.Format("File is not available in location : {0}", fileFullPath);
                        Dts.Events.FireError(0, "Dat file loading", msg, string.Empty, 0);
                        Dts.TaskResult = (int)ScriptResults.Failure;
                }
    
                //Read last line
                String lstLine = File.ReadLines(fileFullPath).Last();
    
                int totalCount = 0;
                bool talierExists = int.TryParse(lstLine, out totalCount);
    
                if (!talierExists)
                {
                        var msg = String.Format("No tailer row found and last line is : {0}", lstLine);
                        Dts.Events.FireError(0, "Dat file loading", msg, string.Empty, 0);
                        Dts.TaskResult = (int)ScriptResults.Failure;
                }
    
                //Total count
                int fullCount = File.ReadLines(fileFullPath).Count();
    
                if (fullCount != totalCount)
                {
                        var msg = String.Format("No of count is not matching, tailer count = {0} and full count={1}");
                        Dts.Events.FireError(0, "Dat file loading", msg, string.Empty, 0);
                        Dts.TaskResult = (int)ScriptResults.Failure;
                }
    
                Dts.Variables["IsValidated"].Value = true;
    
                Dts.TaskResult = (int)ScriptResults.Success;
    }
    
    在那之后,你的数据流。将脚本任务与数据流连接起来,右键单击连接器,然后按如下所示进行编辑和配置

    您的SSIS包将如下所示


    希望这有帮助

    很抱歉说。。。但基本上你是在说——这是我的项目,请帮我做。好的方面是您清楚地理解需求。现在,一次只取一块,试着执行,如果卡住了,就返回。从长远来看,用勺子喂食只会伤害你。致以问候和良好祝愿…非常感谢您的回复。我有几个疑问。在迭代foreach容器中的文件之前,我需要检查文件夹中是否存在所有文件。为此,我有一个包含文件名和其他相关信息的表。那么,如何通过将其与表进行比较来进行检查呢?好的,让执行SQL任务[with'Select fileInfo from']并将结果保存在对象变量中。现在,您可以在For each循环中使用ADO.NET枚举器来遍历表。关于上述代码中已处理的文件存在情况。此外,您能否告知我们是否可以使用foreach循环将每个文件加载到其各自的表中?如果表的结构相同,我们可以加载它…如果它的结构不同,我们可以根据您的要求创建10个数据流,并决定运行哪一个数据流,并具有优先约束以决定运行哪一个数据流。。。