首页 > 解决方案 > SSIS 2008R2 禁用在设计时从运行时存储回来的属性

问题描述

我有一个包,其中大部分活动每天都运行,但有些只在特定工作日运行(主要是 WD1)。我有一个变量表示当月的 WD 指数(例如 2019 年 1 月 2 日是 WD1,因为第一个是英国的银行假日)。我在 Execute SQL 任务上设置了一个表达式,这样 Disable 属性由 (@WDindex != 1) 评估,即当 WDindex 不是 1 时它被禁用。

在 BIDS 中,我启用所有任务并运行包,让它运行并正常运行。一旦执行并单击停止按钮,我发现今天不会运行的任务仍然被禁用。即禁用值从运行时传递回设计时值。它们在运行前被启用。

所以我有几个问题:

  1. 这是一个不起眼的错误,还是这样设计的?
  2. 如果容器/任务被禁用,其禁用属性上有一个表达式,它会运行该表达式来确定是否重新启用它?
  3. 一旦在 SSIS 服务器上,这种行为会继续吗?即运行后,禁用标志的值是否存储回存储包中?

显然,我希望每次包运行时重新评估任务的 Disable 属性。

谢谢你的帮助,

标记

标签: ssis

解决方案


有设计时体验和运行时体验。在设计时,变量@WDindex 的值是……不管它是什么。对于这个答案,我假设为 1。您根据值启用/禁用了任务,这反映在设计器中。

当程序包运行时,@WDIndex 的值更改为当前/运行时值。在这里,我假设它不是 1,因此可以在您的包中正确启用。当 SSIS 包执行完成时,它不会保存当前状态。相反,该工作空间被重置为默认设计时值,以期待下一次运行。

每次访问表达式时都会对其进行评估。如果你有一些在任务之间切换@WDIndex 的方法,你会看到这个。一个更简单的方法是查看 GetDate() 函数。每次您要求检查时,该值都会改变 - 除非您通过 Script Task 或 Expression Task (2012+) 将值显式存储到变量中。


推荐阅读