我知道这个话题已被多次讨论,但我有一点需要注意,我似乎无法找到答案。
我有几个包都有ActivityDate变量。默认情况下,软件包需要在昨天的日期运行。
有两种可能的情况。
场景1 - 从主包调用包。在这种情况下,ActivityDate在主程序包中设置一次,到昨天的日期,然后传递给子程序包。
场景2 - 程序包独立运行。在这种情况下,ActivityDate在每个子包中设置,也通过表达式设置在昨天的日期。
在SQL 2008中,它非常简单 - 每个子包中的变量通过方案1的包配置设置,但在方案2中运行时使用表达式。
我不清楚如何在2012年完成此任务。没有更多的软件包配置,因此我需要在子软件包中创建package参数,然后从父级链接到它。但参数不使用表达式。因此,如果我在子包中创建ActivityDate参数,那么我可以从父级链接到它(对于场景1),但是我不能为它创建表达式(对于场景2)。如果我只有ActivityDate变量,那么我可以创建一个表达式,但不能从父级链接到它。
那么我如何让这两个场景在2012年运作?
请帮助!
答案 0 :(得分:9)
首先,参数绑定可以使用表达式:
其次,代替包配置,您具有执行相同基本功能的环境变量,在运行时动态设置参数值。基本设置是:
无论如何,它并不完全清楚你想要完成什么 - 默认情况下使用父活动日期,但是允许使用参数覆盖它?或者,如果您独立于父母调用子包,仍然提供昨天的值?
所以,我认为这可以实现你想要的东西:
(@[$Parameter::RunningFromMaster] ? @$Parameter::MasterActivityDate : DATEADD("d",-1, GETDATE() ) )
当您从master运行时,User :: ChildActivityDate将只传递传递给MasterActivityDate参数的任何值。当您的子包独立运行时,它只会使用表达式来提取昨天的日期(随意修改表达式以满足您的特定需求。)
此外,如果有人问,我使用了布尔值,因为DateTime参数总是默认为GETDATE(),因此您必须构建复杂的条件以确定它们是否已设置。