我有一个父包需要多次执行相同的子包。为了使事情变得更有趣,每个实例都需要为传递给子包的父参数定义不同的值。
我使用以下脚本创建了一个脚本任务:
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 :(得分:3)
您可以使用LoadFromSqlServer方法
代替App.LoadPackage方法app.LoadFromSqlServer("\OptionalFolderButSlashRequired\ChildPackage", "server", null, null, null);
Application和Package上的文档通常都有我需要使用的方法的示例。