只处理新文件(process the new files only)

2019-08-02 08:16发布

我已经从这些文件将被处理的源极。 多个文件随机来的是loacation在任何时间(包应该运行每2小时)。 我只处理新的文件,我不能删除,从该位置移动已处理的文件。 我只能将文件复制到存档位置。 我怎样才能做到这一点?

Answer 1:

您可以通过以下步骤实现这一目标。

  1. 使用Foreach文件枚举为您的传入文件夹并保存在“IncomingFile”变量名。 配置选择“名和扩展名” [在我的代码我已经使用,否则你需要做一些修改脚本]
  2. 像“ArchivePath” string和“IsLoaded”布尔[默认为false]创建拖SSIS变量。
  3. 创建SSIS的脚本组件,并使用“IncomingFile”和“ArchivePath”作为只读变量。 “IsLoaded”应该是ReadandWrite变量。
  4. 写脚本组件下面的代码。 如果文件已经存在,那么它将返回true。 否则为false。

     public void Main() { var archivePath = Dts.Variables["ArchivePath"].Value.ToString(); var incomingFile = Dts.Variables["IncomingFile"].Value.ToString(); var fileFullPath = string.Format(@"{0}\{1}",archivePath,incomingFile); bool isLoaded = File.Exists(fileFullPath); Dts.Variables["IsLoaded"].Value = isLoaded; Dts.TaskResult = (int)ScriptResults.Success; } 
  5. 使用优先约束来调用数据流任务和评估操作应该是“表达”。 在你的表达盒如下设置的东西。

    @IsLoaded==False

希望这可以帮助。



Answer 2:

你的包应该处理的文件在指定的目录,然后将它们移到一旦处理另一个目录。 这样一来,每个包运行时,它必须完全处理的源目录。

为了处理目录中的每个文件,使用ForEach集装箱。 您可以指定一个文件夹来照照,以及一些表达式来过滤。 如果,例如,你的文件名包含时间戳,您可以使用该时间戳来过滤或缩小您的文件。

您可以使用平面文件源读取文件,然后使用文件系统任务移动它们。



Answer 3:

首先,看看答案在这里: 使用SSIS脚本任务文件夹中的文件枚举

在SSIS脚本任务应该列举的所有文件在指定的文件夹,然后采取从表中已处理的文件,在那里你会保持一个日志是怎么处理的快照,忽视了已经处理过的人,只是返回的未加工对象变量为一个换每个任务消耗。



文章来源: process the new files only