2016-08-29 34 views
2

我需要将子包中变量的值拉到父包中。我无法得到这个工作。SSIS 2012将子变量传递给父包

我可以使用软件包配置从父母到孩子设置变量,但我无法找到一种方法来获取孩子的价值父母。我尝试使用相同的过程,我用来设置孩子的父母值,但它不起作用。

从另一个主题发布可能的解决方案并不能解决它刚刚声称它可能无法解决的问题。这篇文章是从2013年开始的,很多事情都发生了变化,我想看看现在是否可以实现这一点(不需要将值存储到外部表或类似的东西上)。

+1

(HTTP [从子包与项目部署模型父SSIS 2012传递值]的可能的复制代码://计算器。 com/questions/20288766/ssis-2012-pass-values-from-child-package-to-parent-with-project-deployment-model) – mxix

+0

来自另一个主题的发布可能的解决方案并没有解决它刚才声明的问题不可能。这篇文章是从2013年开始的,很多事情都发生了变化,我想看看现在是否可以实现这一点(不需要将值存储到外部表或类似的东西上)。 – Brad

+2

看看其他答案。正确的答案是它不可能是直接绑定。但似乎有一种方法;)[脚本](http://stackoverflow.com/a/24816078/3665707)或[变量](http://stackoverflow.com/a/23121337/3665707) – mxix

回答

3

这个孩子包被用在很多地方,其中许多地方没有我想要设置的父变量(它不会存在于父变量中)。所以上面的帖子中的标准脚本将不起作用。我希望有一个简单的返回变量值。

使用上面的帖子作为起点,我更新了C#代码来检查我试图在父包中设置的变量是否首先存在(因为它不总是存在),然后如果这样设置它。

下面是我想出了

 // have to do this FIRST so you can access variable without passing it into the script task from SSIS tool box 
     // Populate collection of variables. 
     //This will include parent package variables. 
     Variables vars = null; 
     Dts.VariableDispenser.GetVariables(ref vars); 
 // checks if this variable exists, and if so then will set it to the value of the child variable 

     if (Dts.VariableDispenser.Contains("ParentVar") == true)    
     { 
      //MessageBox.Show("ParentVariableExists"); 

      // Lock the to and from variables. 
      // parent variable 
      Dts.VariableDispenser.LockForWrite("User::ParentVar"); 
      // child variable 
      Dts.VariableDispenser.LockForRead("User::ChildVar"); 

      // Apparently need to call GetVariables again after locking them. 
      // Not sure why - perhaps to get a clean post-lock set of values. 
      Dts.VariableDispenser.GetVariables(ref vars); 
      // parentvar = childvar 
      vars["User::ParentVar"].Value = vars["User::ChildVar"].Value; 

      vars.Unlock(); 

     } 
1

您可以将变量放在父包中,让子包修改它。

另一个可靠的方法是在子包中填充一个表并读取父包中的表。

+1

我试过使用包配置的方式与我从父级设置子变量的方式相同,但是从子包返回时父级包中的值未更新。 – Brad