sql-server - SSIS无法在OnTaskFailed事件处理程序上移动文件

标签 sql-server error-handling ssis

我有一个程序包,可以循环多个平面文件,并使用脚本组件对其进行解析,然后将其放入我的数据库中。这个想法是包指向一个共享文件夹并遍历所有文件。如果成功导入了数据,程序包将随后删除该文件。一旦foreach循环为空(所有文件均已成功导入),程序包将删除目录中的所有内容,以防程序包没有循环通过任何不需要的文件/目录。
目前,我的控制流程如下所示:

Control Flow

我的数据流如下所示(请忽略警告,这只是可能的截断错误):

Data Flow

现在,如果我的任何任务失败了,我希望将文件移动到另一个目录,以便可以导入其余文件,并在以后处理故障文件。
我的事件处理程序是一个文件系统任务集,用于移动文件OnTaskFailed。这是针对我的软件包的整个范围设置的。当执行一个我知道会导致文件失败的文件包时,我收到以下错误消息:

[File System Task] Error: An error occurred with the following error message: "The process cannot access the file ' \UNCpath\filepath\file.txt' because it is being used by another process.".



如何解锁该文件,以便在出错时将其移动到另一个文件夹?我在文件系统任务上将延迟验证设置为true。我还尝试过包括一个脚本组件,该组件使程序包在尝试移动它之前要等待十秒钟。我不知道还有哪些其他进程正在使用该文件。

如果还有其他更好的方法来处理我要完成的工作,则我欢迎任何建议。

最佳答案

问题在于,循环处于 Activity 状态时,循环文件系统任务会保存OS文件句柄,因此您无法删除或移动它们。您将必须将文件移动逻辑从“移动”转换为“复制”(内部循环)和“删除”(外部循环)。

创建一个遵循数据流任务错误结果的流,然后将失败的文件复制到失败的文件目标。然后,您的空目录任务将处理删除。

关于sql-server - SSIS无法在OnTaskFailed事件处理程序上移动文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49492782/

相关文章:

sql - SQL Server Management Studio 中的存储过程依赖项

sql-server - SQL Cascade 树可视化工具

perl - 阶乘递归达到零时出错

sql-server - SSIS 返回不正确的错误

SSIS包配置错误 "One or more required parameters have not been assigned values"

sql-server - sqldumper错误导致C盘满

c# - 当 Microsoft SQL Server 中包含 html 标签时对列进行排序

exception - 如何在 Octave 的.oct文件中引发异常?

c# - 使ModelState持久,但不能太持久

sql - IF语句错误