如果子容器进程失败,SSIS 在父容器中执行文件任务

SSIS Execute File Task In Parent Container If Child Container Process fails

我正在尝试创建一个使用 SSIS 将 excel 文件导入数据库的包。

由于该操作必须定期执行此操作并且文件名遵循约定但不相同,同样 sheet/tab 名称并不总是相同,因此 SSIS 包设置如下:

主容器 -> First For Each 容器(称之为 FE1) 获取文件名(分配给变量) -> Second For Each Container(称之为 FE2) 获取工作表名称并启动导入过程。

我所做的是创建一个从 FE2 到 FE1 中的文件系统任务进程的 "failure" 优先约束。

想法是,如果导入由于任何原因不成功,则完成文件移动。

(一旦成功,我想创建一个 "success" 进程,将文件移动到存档文件夹)

文件任务进程在只有一个 "for each container"(即没有像现在这样嵌套)时工作,但当所有进程都在引用 "file in use" 的嵌套容器中时失败。我假设这是因为每个容器的第一个正在锁定文件,因此我将文件任务进程移动到每个容器的第一个并使用先例控制。

非常感谢任何帮助和建议。

为了可能遇到相同问题的其他人的利益:

无论是爱情还是金钱,我都无法获得 excel 连接器来释放文件,即使移动文件任务在循环之外也是如此。

最后我在数据库中记录了被移动到 table 中的文件,然后执行了包含移动文件任务的第二个包,并将遍历 table 行成功导入(和导入失败)文件的列表,并根据 fail/success 标志将它们移动到目的地。

这是我成功实现这一目标的唯一途径。

当必须遍历每个 excel 文件的工作表时(即有效地两个 excel 连接)SSIS 不会释放文件,所以我永远收到文件使用错误和失败。