【问题标题】:SSIS For Loop Container Runs Successfully But Data Flow Tasks and Scripts Inside of the Loop Intermittently RunSSIS For Loop 容器运行成功,但循环内的数据流任务和脚本间歇性运行
【发布时间】:2019-03-14 16:02:14
【问题描述】:

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

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

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

@begindate 变量的表达式是

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

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

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

无数据变量信息的成功运行图片

【问题讨论】:

  • SSIS 数据库位置和系统时间很重要。是本地服务器吗?
  • @user10454145 你能贴一张它什么时候不运行的图片吗?难道都跑不了?如果添加日志记录,您会在其中看到什么?
  • @ShivSidhu 是的,它是本地服务器,感谢您的询问,我忘了在帖子中包含它。它正确解释了 dateadd 表达式(例如,当我今天运行它时,它返回 3 月 13 日,3 月 14 日)
  • @Arthur 向 OP 发布了一张照片。我禁用了其他软件包,但它们都做了类似的事情。将链接粘贴到图像中,该图像显示 For Loop 容器成功执行,然后在运行时填充了哪些变量。不确定您还想查看哪些其他日志记录?
  • 我可以看到你设置了断点,这就是执行停止的原因@user10454145

标签: sql-server ssis etl foreach-loop-container


【解决方案1】:

使用@[System::StartTime] 代替 GETDATE()

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

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

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

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

初始化表达式

@startdate = @begindate

评估表达式

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

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

赋值表达式

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

【讨论】:

  • 我已经实施了这种方法...我会报告任何成功。如果我的工作今晚和明天成功返回数据,我会回来并将其标记为解决方案,谢谢!
  • 似乎工作正常,永远不会猜到 getdate() 会导致这样的问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 2018-10-17
  • 1970-01-01
相关资源
最近更新 更多