SSIS 2012 - 将变量从父包传递到子包

Tam*_*ila 3 sql ssis ssis-2012

我知道这个话题已被多次讨论,但我有一点需要注意,我似乎无法找到答案.

我有几个包都有ActivityDate变量.默认情况下,软件包需要在昨天的日期运行.

有两种可能的情况.

场景1 - 从主包调用包.在这种情况下,ActivityDate在主包中设置一次,到昨天的日期,然后传递给子包.

场景2 - 程序包独立运行.在这种情况下,ActivityDate在每个子包中设置,也通过表达式设置为昨天的日期.

在SQL 2008中,它很容易 - 每个子包中的变量通过方案1的包配置设置,但在方案2中运行时使用表达式.

我不清楚如何在2012年完成此任务.没有更多的包配置,所以我需要在子包中创建包参数,然后从父链接链接到它.但参数不使用表达式.因此,如果我在子包中创建ActivityDate参数,那么我可以从父级链接到它(对于场景1),但我无法为它创建表达式(对于场景2).如果我只有ActivityDate变量,那么我可以创建一个表达式,但不能从父级链接到它.
那么我如何让这两个场景在2012年运作?

请帮忙!

Kyl*_*ale 9

首先,参数绑定可以使用表达式:

  1. 创建变量@User :: Variable以保存要传递给子包的值.
  2. 将@User :: Variable绑定到您的子参数.

其次,不是包配置,而是具有执行相同基本功能的环境变量,在运行时动态设置参数值.基本设置是:

  1. 定义项目参数并在包中使用它.
  2. 在IS服务器上,定义环境,设置环境变量.
  3. 部署项目并将环境变量绑定到项目参数.
  4. 使用特定的环境引用执行包.

无论如何,你要完成的是什么并不完全清楚 - 默认情况下使用父活动日期,但允许使用参数覆盖它?或者,如果您独立于父级调用子包,仍然提供昨天的值?

所以,我认为这可以实现你想要的:

  1. 在Master Package User :: ActivityDate中创建变量.直接设置其值或使用表达式.
  2. 在Master Package User :: RunningFromMaster中创建第二个变量.设置为类型布尔值并将默认值设置为True.
  3. 在Execute Package任务中绑定到User :: ActivityDate的Child Package $ Parameter :: MasterActivityDate中创建参数.
  4. 在"执行包"任务中绑定到User :: RunningFromMaster的Child Package $ Parameter :: RunningFromMaster中创建参数.设置为类型布尔值,默认为False.
  5. 在Child Package User :: ChildActivityDate中创建变量.
  6. 将User :: ChildActivityDate的Expression属性设置为 (@[$Parameter::RunningFromMaster] ? @$Parameter::MasterActivityDate : DATEADD("d",-1, GETDATE() ) )
  7. 在包中使用User :: ChildActivityDate.

当您从master运行时,User :: ChildActivityDate将只传递传递给MasterActivityDate参数的任何值.当你的子包独立运行时,它只会使用表达式来提取昨天的日期(随意修改表达式以满足你的特定需求.)

此外,如果有人问,我使用了一个布尔值,因为DateTime参数总是默认为GETDATE(),所以你必须建立复杂的条件来确定它们是否已被设置.