SSIS脚本任务:如何在一个包中设置变量并在另一个包中使用它

SSIS脚本任务:如何在一个包中设置变量并在另一个包中使用它,ssis,Ssis,我需要在另一个包的脚本任务中使用在一个包的脚本任务中得到的变量。如何使变量的作用域跨越包?是否存在项目变量?在SQL Server Integration Services 2012之前,在包之间共享值的唯一方法是使用父/子配置。实际上,您可以在不使用配置的情况下在它们之间共享一个值,但当所有人都离开时,它会变得很僵硬 如果不需要双向通信,那么可以让包A(在脚本任务中计算值的包)启动包B,并使用/SET属性为变量赋值 dtexec /file PackageB.dtsx /Set \Packag

我需要在另一个包的脚本任务中使用在一个包的脚本任务中得到的变量。如何使变量的作用域跨越包?是否存在项目变量?

在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项目部署模型中,配置概念已替换为参数。当您定义参数并指定它们是否是必需的时,这就更直接了。
执行包任务
在局部变量和预期参数之间提供了一种良好的映射机制。

在SSIS 2005和2008中: 在包级别声明一个变量(比如p为int) 从父包调用子包。 现在,如果您在子包中有一个脚本任务,您可以像下面这样访问变量p: 1.在子包的脚本任务编辑器中传递只读变量p 2.访问父变量:Dts.Variables[“p”].Value; 请注意,在上述两个步骤中,我都没有使用“User::p”。我觉得这个方法很简单。 确保没有在子包级别声明变量p

那么,这种方法是如何工作的呢?思考变量范围的基本概念。脚本任务将继续“向上”以查找变量p。上升意味着——它将首先尝试在任务级别、容器级别、包级别找到它,然后在父包级别找到它。(这是一个简单的解释——从技术上讲,每个级别都是容器。)

在SSIS 2012中,还可以使用参数以只读模式传递变量。上述方法也可在SSIS 2012中使用,具有能够覆盖父变量值的额外优势