我需要在另一个包中的脚本任务中的一个包中使用我在一个脚本任务中获得的变量。如何使用跨越包的范围创建变量?是否有项目变量?
答案 0 :(得分:2)
在SQL Server Integration Services 2012之前,在包之间共享值的唯一方法是使用父/子配置。实际上你可以在不使用配置的情况下在它们之间共享一个值,但是当它全部退出时它很笨拙。
如果您不需要双向通信,那么您可以使用程序包A(计算脚本任务中的值)启动程序包B并使用/ SET属性为变量赋值
dtexec /file PackageB.dtsx /Set \Package.Variables[User::SharedVariable].Properties[Value];\"I was computed\"
在SQL Server 2012项目部署模型中,Configuration概念已替换为Parameters。在定义Parameters并指定它们是否是必需的时,这更直接。 Execute Package Task
在局部变量和预期参数之间提供了一个很好的映射机制。
答案 1 :(得分:1)
在SSIS 2005和2008中: 在包级别声明一个变量 - 比如说p为int 从父包调用您的子包。 现在,如果您在Child包中有脚本任务,则可以像这样访问变量p: 1.在Child包的Script Task Editor中传递ReadOnly变量p 2.访问父变量:Dts.Variables [“p”]。值; 请注意,我在上述两个步骤中都没有使用“User :: p”。我发现这种方法是直截了当的。 确保不在子包级别声明变量p。
那么,这种方法如何运作?想一想变量范围的基本概念。脚本任务将继续“上升”以找到变量p。上升意味着 - 它将首先尝试在任务级别找到它,然后是容器级别,然后是包级别,最后是在父包级别。 (这是一个简单的解释 - 从技术上讲,每个级别都是容器。)
在SSIS 2012中,您还可以使用参数以ReadOnly模式传递变量。上述方法也可用于SSIS 2012,并具有能够覆盖父变量值的附加优势。