SSIS 2008R2禁用从运行时在设计时存储回的属性

时间:2019-01-16 16:10:40

标签: ssis

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

在BIDS中,我启用了所有任务并运行该程序包,使其运行并正常运行。一旦执行了该命令,然后单击“停止”按钮,我发现今天无法运行的任务仍被禁用。即Disable值从运行时传回设计时间值。它们在运行之前已启用。

所以我有几个问题:

  1. 这是一个晦涩的错误,还是它是这样设计的?
  2. 如果容器/任务被禁用,并且其disable属性带有表达式,它将运行该表达式以确定是否重新启用它吗?
  3. 一旦在SSIS服务器上,此行为会继续吗?即运行后,“禁用”标志的值是否存储回存储的软件包中?

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

感谢您的帮助,

标记

2 个答案:

答案 0 :(得分:0)

有设计时经验和运行时经验。在设计时,变量@WDindex的值是...无论是什么。我将以1为答案。您将根据该值启用/禁用任务,这将反映在设计器中。

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

每次访问表达式时都会对其求值。如果您在任务之间有某种切换@WDIndex的方法,则会看到此信息。亲自查看此内容的更简单方法是查看GetDate()函数。每次您检查它时,值都会改变-除非您通过脚本任务或表达式任务(2012+)将值显式存储到变量中,否则该值将消失。

答案 1 :(得分:0)

经过一些实验,我确定了以下内容:

  1. 我认为这是一个错误而不是一个功能,但这并不重要,是的,所得到的运行时值肯定会覆盖设计时间值。

  2. 对Disable属性进行了充分的重新评估,以便在运行期间更改其值时,任务将执行此操作。我使用了一个可以无限期运行的循环容器和一个仅在每分钟的第一秒钟启用的ExecuteSQL任务进行了测试。 ExecuteSQL任务将当前日期时间写入一个简单表。表格在任务运行的第一分钟的第一秒内慢慢充满了日期时间。

InitExpression: @WDindex = DATEPART("s", GETDATE()) EvalExpression: true AssignExpression: @WDindex = DATEPART("s", GETDATE())

对于ExecuteSQL任务:

INSERT Sandbox.dbo.Log
    (CreatedDateTime,
    Description)
VALUES
    (GETDATE(),
    'Task not disabled')
  1. 我不知道,但是给定2的结果,这并不重要。