3

我知道这个话题已经被讨论过很多次,但我有一个警告,我似乎无法找到答案。

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

有两种可能的情况。

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

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

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

我不清楚如何在 2012 年做到这一点。没有更多的包配置,所以我需要在子包中创建包参数,然后从父包链接到它。但是参数不使用表达式。因此,如果我在子包中创建 ActivityDate 参数,那么我可以从父包链接到它(对于场景 1),但我不能为它创建表达式(对于场景 2)。如果我只有 ActivityDate 变量,那么我可以创建一个表达式,但不能从父级链接到它。
那么我如何让这两种情况在 2012 年发挥作用呢?

请帮忙!

4

1 回答 1

11

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

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

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

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

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

所以,我认为这完成了你想要的:

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

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

另外,如果有人问,我使用了布尔值,因为 DateTime 参数始终默认为 GETDATE(),因此您必须构建复杂的条件来确定它们是否已设置。

于 2014-08-04T17:19:11.017 回答