我正在使用新的项目部署模型。
我有一个称为ETL的主程序包。我的ETL软件包所做的第一件事是运行一个名为get SFTP files的软件包,如图所示。
在获取SFTP文件中,一个foreach循环获取ClientID。我如何将此值传递回父包ETL ???做插入等
最佳答案
这是一种将值从子包变量传递到父包变量的方法。
脚本任务:(在子程序包中)
// Populate collection of variables.
// This will include parent package variables.
Variables vars = null;
Dts.VariableDispenser.GetVariables(ref vars);
// Lock the to and from variables.
Dts.VariableDispenser.LockForWrite("User::MyParentPackageVar");
Dts.VariableDispenser.LockForRead("User::MyChildPackageVar");
// 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);
vars["User::MyParentPackageVar"].Value = vars["User::MyChildPackageVar"].Value;
vars.Unlock();
该代码实际上来自2012年之前的SSIS程序包,我刚刚完成了对SQL Server 2012的SSIS升级(在Visual Studio 2012中),并转换为项目部署模型。
最初,执行在变量分配行上终止(经过长时间的延迟)。但是,然后我添加了“User::”前缀,这显然是至少一个但不是我通过这种方式分配的所有变量所必需的。在SQL Server 2008的SSIS中,前缀不是必需的。
关于SSIS 2012通过项目部署模型将子包中的值传递给父包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20288766/