2013-04-05 81 views
4

我有一个父包需要多次执行相同的子包。为了让事情更有趣,每个实例都需要为传递给子包的父参数定义不同的值。从脚本任务执行SSIS包存储中的子包,带有扭曲

我使用下面的脚本创建了一个脚本任务:

Microsoft.SqlServer.Dts.Runtime.Application App = new Microsoft.SqlServer.Dts.Runtime.Application(); 
     Package pkg = new Package(); 

    try 
    { 
     pkg = App.LoadPackage(@"\\server\SSIS Packages\ChildPackage.dtsx", null); 
     pkg.Variables["ChildVariableName"].Value = Dts.Variables["AParentVariableName"].Value; 
     pkg.Execute(); 

     Dts.TaskResult = (int)ScriptResults.Success; 
    } 
    catch (Exception ex) 
    { 
     Dts.Events.FireError(0, "Run child pkg for parent task", ex.Message, string.Empty, 0); 
     Dts.TaskResult = (int)ScriptResults.Failure; 
    } 

问题是,我的包都存储在我的SQL 2008 R2服务器的SSIS包店,我无法弄清楚如何引用它们;我见过的每个代码示例都是针对物理位置的。这在HA群集上,因此具有该包的物理位置将难以维护。

因此,我需要(a)找出如何在每次为此子包启动一个执行包任务时更改ParentVariable的值,或者(b)弄清楚如何引用SSIS包中的正确包在这一点上,我可以安全地传递适当的价值。有人有主意吗?

+0

我的另一个相关的问题,与一个答案 - http://stackoverflow.com/questions/20671920/pass-variables-to-child-via-c-sharp-script-task – Steam 2013-12-19 21:19:04

回答

3

相反App.LoadPackage方法,你可以使用LoadFromSqlServer方法

app.LoadFromSqlServer("\OptionalFolderButSlashRequired\ChildPackage", "server", null, null, null); 

的文档上ApplicationPackage通常有我需要使用方法的例子。