I hear you. You’ll use the Execute Package Task. This mechanism of executing one package from another is popularly knows as Parent Child paradigm. Let me tell you, this isn’t new in 2012. There are, however, a few changes to the Execute Package Task. Let’s take a look.
I added two packages to the project and conveniently named them Parent.dtsx and Child.dtsx.
In the child package, I added a script task and used the following script. This will display a message box and tells that it is executing.
MsgBox(“Howdy! I’m the child package”)
In the parent package, I added an Execute Package Task and renamed it to Run Child Package.
In the Package page of the Execute Package Task editor, there is a new property called reference type. It is set to Project Reference by default. This means you can point the execute package task to another package within the same project. I selected Child.dtsx from the drop down.
The following is the output when I execute the parent package.
In prior versions, you’ll have to choose either file system or SQL Server as the source for child package and have connection managers to all the child packages in the parent. For example, if you have one parent package calling 50 child packages, the parent needs 50 connection managers to each of those child packages. This is still supported for legacy packages – change the reference type property to External Reference.
Passing a variable from parent to child
You often pass variables from parent package to the child package; connection strings, parent package start time, parent package name (ok. May be). Again, in the previous versions, you would use a parent package configurations to do this.
In this example, I’ll pass parent package name to the child package.
Another change to the Execute Package Task is parameter binding. You can map a parameter or a variable from the parent package to a parameter in the child package.
In the below image, I created a parameter in the child package. I wrote about SSIS parameters in an earlier post.
From the parent package, open the Execute Package Task Editor. In the parameter bindings page, I mapped the child parameter to the parent’s PackageName system variable.
Then I changed the script in the child package as follows:
MsgBox(“Howdy! I’m the Child Package. I was called by ” & Dts.Variables(“$Package::ParentName”).Value.ToString)
When I execute the parent package, I see…
In this post, I looked at using Execute Package Task to call a package from another and pass variable from parent to child.