gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:57:58 29 4
gpt4 key购买 nike

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

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

有两种可能的情况。

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

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

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

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

请帮忙!

最佳答案

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

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

  • 其次,您拥有执行相同基本功能的环境变量,而不是包配置,在运行时动态设置参数值。基本设置是:
  • 定义一个项目参数并在你的包中使用它。
  • 在 IS 服务器上,定义环境,设置环境变量。
  • 部署您的项目并将环境变量绑定(bind)到您的项目参数。
  • 使用特定环境引用执行包。

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

    所以,我认为这完成了你想要的:
  • 在 Master Package User::ActivityDate 中创建变量。直接或使用表达式设置其值。
  • 在 Master Package User::RunningFromMaster 中创建第二个变量。设置为 bool 类型并将默认设置为 True。
  • 在子包中创建参数 $Parameter::MasterActivityDate 绑定(bind)到执行包任务中的 User::ActivityDate。
  • 在 Execute Package 任务中绑定(bind)到 User::RunningFromMaster 的子包 $Parameter::RunningFromMaster 中创建参数。设置为 bool 类型,默认为 False。
  • 在子包用户::ChildActivityDate 中创建变量。
  • 将 User::ChildActivityDate 的 Expression 属性设置为 (@[$Parameter::RunningFromMaster] ? @$Parameter::MasterActivityDate : DATEADD("d",-1, GETDATE() ) )
  • 在你的包中使用 User::ChildActivityDate。

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

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

    关于sql - SSIS 2012 - 将变量从父包传递到子包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25123491/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com