我需要将子包中的变量值拉到父包中。我不能让这个工作。
我可以使用包配置从父级到子级设置变量,但是我找不到将子值转换为父级的方法。我尝试使用相同的过程,我用它来设置孩子的父级值,但它不起作用。
从另一个主题发布的可能解决方案并没有解决它刚刚声明可能无法解决的问题。帖子是从2013年开始的,很多东西都在变化,我想看看现在是否可以这样做(不保存外部表格或类似的东西)。
答案 0 :(得分: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)
您可以将变量放在父包中,让子包修改它。
另一种确定的方法是填充子包中的表并读取父包中的表。