我已经从这些文件将被处理的源极。 多个文件随机来的是loacation在任何时间(包应该运行每2小时)。 我只处理新的文件,我不能删除,从该位置移动已处理的文件。 我只能将文件复制到存档位置。 我怎样才能做到这一点?
Answer 1:
您可以通过以下步骤实现这一目标。
- 使用Foreach文件枚举为您的传入文件夹并保存在“IncomingFile”变量名。 配置选择“名和扩展名” [在我的代码我已经使用,否则你需要做一些修改脚本]
- 像“ArchivePath” string和“IsLoaded”布尔[默认为false]创建拖SSIS变量。
- 创建SSIS的脚本组件,并使用“IncomingFile”和“ArchivePath”作为只读变量。 “IsLoaded”应该是ReadandWrite变量。
写脚本组件下面的代码。 如果文件已经存在,那么它将返回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; }
使用优先约束来调用数据流任务和评估操作应该是“表达”。 在你的表达盒如下设置的东西。
@IsLoaded==False
希望这可以帮助。
Answer 2:
你的包应该处理的文件在指定的目录,然后将它们移到一旦处理另一个目录。 这样一来,每个包运行时,它必须完全处理的源目录。
为了处理目录中的每个文件,使用ForEach集装箱。 您可以指定一个文件夹来照照,以及一些表达式来过滤。 如果,例如,你的文件名包含时间戳,您可以使用该时间戳来过滤或缩小您的文件。
您可以使用平面文件源读取文件,然后使用文件系统任务移动它们。
Answer 3:
首先,看看答案在这里: 使用SSIS脚本任务文件夹中的文件枚举
在SSIS脚本任务应该列举的所有文件在指定的文件夹,然后采取从表中已处理的文件,在那里你会保持一个日志是怎么处理的快照,忽视了已经处理过的人,只是返回的未加工对象变量为一个换每个任务消耗。
文章来源: process the new files only