0

我有一个 SSIS 2019 包,它会在将文件放入文件夹后立即导入 Excel,然后将 Excel 文件移动到另一个文件夹(代理将每 30 分钟运行一次)。一开始我有一个脚本任务,它测试文件是否在预期的文件夹中,如果为真,则控制流转到数据流任务,如果不是,则它无处可去(过程在那里结束)。在测试包时,只要在我打开包或对包执行任何操作时文件位于预期的文件夹中,它就可以正常工作。在我第二次运行包的测试中,在文件被移动后,控制流不会通过脚本任务,但我从数据流中得到一个错误,因为在文件夹中有一个新的空文件与预期文件名但不正确的工作表已自动创建。我不知道是什么任务导致了这种情况,或者 excel 文件连接管理器是否在执行包时执行了此操作。如果文件不在文件夹中,它甚至会在我打开包时立即执行此操作。我该如何阻止这个?我根本不希望它创建一个空的 excel 文件。如果该文件不在指定的文件夹中,我希望它什么也不做。

这是一个完整的事件序列:

  1. 脚本任务检查文件是否在文件夹中 - 否:不执行任何操作
  2. 是 - 执行 SQL 任务删除目标表一中的记录
  3. 然后进入数据流 a.Excel 数据源进入数据转换任务 b.然后数据进入 OLE DB 源(目标表一)
  4. 存在数据流 - 出错时发送电子邮件
  5. 然后执行 - On Error 发送电子邮件的 SQL 任务 删除目标表二中的记录 b. 将记录插入到没有空部件号的目标表二中 c.将记录插入到日志历史表中
  6. 然后执行文件系统任务,将 Excel 文件从 IMBOX 文件夹移动到 OUTBOX 文件夹 – 出错时发送电子邮件 – 成功时发送电子邮件
4

1 回答 1

0

有效的解决方案是将脚本任务(如果文件夹中的文件查询)移动到单独的解决方案,并向其添加执行包任务,设置为文件系统的外部引用,原始包 .dtsx 文件。它可以在 Visual Studio 中完美运行,也可以从 Management Studio 中的代理中完美运行。代理将被安排每 5 分钟运行一次,并且大多数情况下没有要导入的 Excel 文件,也不会产生错误。然后用户将文件放入文件夹,然后在 5 分钟内将其处理到 ETL 数据库中,Excel 文件将被移至发件箱文件夹,用户将收到一封电子邮件,指示该过程已完成或失败。

我确信必须有另一种解决方案来防止数据流任务在打开包时不存在时创建 Excel 数据源。但上述解决方案绝对有效。

于 2021-09-24T13:51:06.597 回答