【问题标题】:SSIS, avoid failure if source file isn't availableSSIS,如果源文件不可用,则避免失败
【发布时间】:2020-01-08 16:18:57
【问题描述】:

我有一个 SSIS 作业,它计划通过 SQL 代理每 5 分钟运行一次。该作业将 excel 文件的内容导入 SQL 表。这一切都很好,但是文件偶尔会放在那里,而且在作业运行时经常根本没有文件。问题是这导致作业失败并发送作业失败的通知电子邮件,但我只想在处理文件时作业失败时收到通知,而不是因为首先没有文件。根据我收集到的信息,我可以使用脚本任务来解决这个问题,以在工作继续之前检查文件是否存在,但我无法让它工作。有人可以分解脚本任务的工作原理以及我需要哪种脚本来检查文件是否存在?或者,如果有更好的方法来完成我想做的事情,我也愿意接受!

我在尝试 Foreach 循环方法时遇到的错误是

【问题讨论】:

  • 为什么不使用脚本任务来检查文件是否存在,将值分配给变量和条件流?你也可以使用 Foreach 循环容器来做同样的事情(我经常做的事情)。
  • 我认为您的错误更多地与延迟验证有关。

标签: sql-server ssis


【解决方案1】:

这可以通过 SSIS 中的Foreach Loop Container 轻松完成。

简单地说,容器将检查您指向的目录,并为找到的每个文件执行容器内的任务。如果没有找到文件,则永远不会执行容器的内容。如果没有找到文件,您的工作不会失败。它将完成报告成功。

查看这个很棒的intro blog post 了解更多信息。

在附上问题的图片中,具体错误与 Excel 源验证失败有关。当 SSIS 打开一个包进行编辑或运行时,它所做的第一件事是验证成功运行所需的所有工件是否可用并符合预期的形状/API。由于预期的文件可能不存在,右键单击 Excel 连接管理器并在属性菜单中,找到 DelayValidation 的设置并将其更改为 True。这将确保连接管理器仅在包实际使用它时验证资源是否可用它传递到 Foreach 循环容器。您还需要在数据流任务上将相同的 DelayValidation 设置为 True

【讨论】:

  • 从字面上看,我建议这种方法。将 foreach 循环容器放入您的控制流,然后将所有现有逻辑放入其中。配置 FELC 以检查您的文件,如果匹配,则运行所有经过测试的代码。没有文件,没问题
  • 我一定是在 FELC 中做错了什么,因为即使文件不存在,我在执行时仍然会出错。
  • @KellyPeterson 将 Excel 连接管理器的 DelayValidation 属性设置为 True。您可能还需要在数据流上设置它,但我不记得 Excel 的表现如何,除了很差
  • 这就是问题所在,在连接管理器上设置 DelayValidation True 并且数据流做到了。谢谢!
【解决方案2】:

您没有提及您正在应用什么脚本方法来搜索您的文件。虽然使用 C# 或 VB.NET 是在这种性质的脚本控制任务中使用的典型脚本语言,但您也可以使用 TSQL,它只会返回保存到用户变量的布尔值(有时系统会限制使用 C# 和 VB.NET) .然后在控制流中应用该用户变量来确定是否导入 (boolean = 1) 或不导入 (boolean = 0)。

查看以下链接,该链接详细显示了如何设置检查文件是否存在的 TSQL 脚本。 Check for file exists or not in sql server?

查看以下链接,该链接显示了如何基于布尔用户变量应用条件检查。此示例还显示了如何在脚本任务中应用 VB.NET 以确定文件是否存在(作为前面提到的 TSQL 方法的替代方法)。 http://sql-articles.com/articles/bi/file-exists-check-in-ssis/

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多