For years I have been controlling how tasks in event handlers or execute package tasks were called using empty sequence containers and expressions. Here is an example of package call I was doing:
My package has a parameter named CallPackage1 as shown in picture below:
The above parameter is then used in the paths precedence constraints expression to determine if the package will be called or not:
So, whenever the parameter was set, the package would execute or not. Since SSIS 2008, we have the ability to disable the package execution without using a sequence container as illustrated above. We simply set the expression in the "Disable" property of the execute package task as shown in the screenshot below.
The execute package task has now an "adornant" is SSIS 2012 and above telling us that an expression is used. In previous version, we have to install BIDSHelper to see such adornant. Even if we set the parameter "CallPackage1" to true, the execute package will not appear disabled unless we close and reopen the package.
Before package execution:
After the value was change and the package is executed or it has been closed and reopened:
So, what's the advantage of using Execute Package Task "disable" property instead of having a sequence container above execute package tasks? Using a sequence container leads to clarity. We clearly see that the package is called upon a parameter's value. When using the Disable expression, it can be harder to see what's the expression of the task and what is does. But, when we have particularely large entry point packages (master packages – packages that call child packages), it's easier to use the Disable property expression of the Execute Package Task because having all tasks linked to the sequence container leads to a more noisy control flow. Therefore, it doesn't enhance package clarity in that case. As Mies van der Rohe said: "Less is More".