首页 > 解决方案 > SSIS For Loop 容器运行成功,但循环内的数据流任务和脚本间歇性运行

问题描述

我已经对 SO 进行了一些研究,但是很难找到解决方案(这可能是我正在搜索的方式),所以如果您知道一个合适的帖子,请指导我找到一个合适的帖子。我也绝不是 SSIS 大师。

我有一个总是成功完成的 SSIS For Loop,但是循环内的各种数据流和脚本任务间歇性地运行(它们有时都运行成功,但是当它们不运行时,它们没有任何迹象表明它们运行了...没有绿色/红色/黄色复选标记,只是空白)。似乎循环中的 evalexpression 被错误地解释了。如果我在 VS 中手动重新运行包,有时它会返回数据,有时它不会。此包部署到 SSISDB 并且 SQL Server 代理作业每晚都成功运行,但同样,间歇性地返回或不返回前几天的数据。

循环是根据日期设置的。initexp 为其分配昨天的日期,assign 表达式在成功运行后将 date 变量增加一天,然后应评估为 false。看图片

循环逻辑

变量的@begindate表达式为

= dateadd("d",-1,getdate())

这是 For 循环及其内部项目的图像。万一重要,里面的任务只是出去并打一个api,将结果存储在一个变量中,然后通过各种脚本任务对其进行处理。

循环内容

故障排除的任何可取的后续步骤?有什么我忽略/遗漏的吗?

没有数据和变量信息的成功运行的图片

成功数据

标签: sql-serverssisetlforeach-loop-container

解决方案


使用 @[System::StartTime] 而不是 GETDATE()

由于GETDATE()是一个每次调用时都会评估的函数,因此如果在 for 循环表达式中使用它可能会导致一些问题。

在 Eval 表达式中使用dateadd("d",-1,GETDATE())意味着它是动态的并且不包含固定值

您可以从包含包执行日期时间的系统变量中受益。 @[System::StartTime]用于评估的表达式@[User::begindate]将是:

= dateadd("d",-1, @[System::StartTime])

初始化表达式

@startdate = @begindate

评估表达式

@startdate <= dateadd("d",-1,@[System::StartTime])

请注意,如果在表达式中不起作用,则添加一个新的类型变量,@[System::StartTime]并且Evaluate is as expression然后在 EvalExpression 中使用此变量。@StartTimeDateTime= @[System::StartTime]

赋值表达式

@startdate = dateadd("d",1,@startdate)

推荐阅读