1

我需要使用我在另一个包中的脚本任务中的一个包中的脚本任务中获得的变量。如何创建具有跨包范围的变量?有项目变量吗?

4

2 回答 2

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 项目部署模型中,配置概念已替换为参数。当您定义参数并指定它们是否需要时,这会更直接一些。它Execute Package Task在局部变量和预期参数之间提供了一个很好的映射机制。

于 2013-07-15T20:32:07.673 回答
1

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

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

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

于 2013-07-15T20:48:20.957 回答