I set out to find a way to dynamically call package in SSIS 2012.  The following are 2 excellent blogs I found; I used them heavily.  The code below has some addition to parameter types and message types, but was made essentially derived entirely from the blogs.  http://sqlblog.com/blogs/jamie_thomson/archive/2011/07/16/ssis-logging-in-denali.aspx  http://www.ssistalk.com/2012/07/24/quick-tip-run-ssis-2012-packages-synchronously-and-other-execution-options/     The code:  Every package will be called by a PackageController package.  The packageController is initialized with some information on which package to run and what information to pass in.       The following is the stored procedure called from the “Execute SQL Task”.  Here is the highlight of the stored procedure     It takes in packageName, project name, and folder name (folder in SSIS project deployment to SSIS catalog)     The stored procedure sets the package variables of the upcoming package execution     Execute package in SSIS Catalog     Get the status of the execution.  Also, if exists, get the error message’s message_id and store them in the management database.     Return value to “Execute SQL Task” to manage failure properly    CREATE PROCEDURE [AUDIT].[LaunchPackageExecutionInSSISCatalog]          @PackageName NVARCHAR(255)         , @ProjectFolder NVARCHAR(255)         , @ProjectName NVARCHAR(255)         , @AuditKey INT         , @DisableNotification BIT         , @PackageExecutionLogID INT  AS  BEGIN TRY         DECLARE @execution_id BIGINT = 0;         -- Create a package execution         EXEC [SSISDB].[catalog].[create_execution]                       @package_name=@PackageName,                       @execution_id=@execution_id OUTPUT,                       @folder_name=@ProjectFolder,                       @project_name=@ProjectName,                       @use32bitruntime=False;            UPDATE [AUDIT].[PackageInstanceExecutionLog] WITH(ROWLOCK)         SET [SSISCatalogExecutionID] = @execution_id         WHERE [PackageInstanceExecutionLogID] = @PackageExecutionLogID            -- this is to set the execution synchronized so that I can check the result in the end         EXEC [SSISDB].[catalog].[set_execution_parameter_value]                       @execution_id,                        @object_type=50,                       @parameter_name=N'SYNCHRONIZED',                       @parameter_value=1; -- true            /********************************************************          ********************************************************               Section: setting parameters                      Source table:  SSISDB.internal.object_parameters               object_type list:                      20: project level variables                      30: package level variables                      50: execution parameter          ********************************************************          ********************************************************/         EXEC [SSISDB].[catalog].[set_execution_parameter_value]                       @execution_id,                        @object_type=30,                       @parameter_name=N'FromParent_AuditKey',                       @parameter_value=@AuditKey; -- true            EXEC [SSISDB].[catalog].[set_execution_parameter_value]                       @execution_id,                        @object_type=30,                       @parameter_name=N'FromParent_DisableNotification',                       @parameter_value=@DisableNotification; -- true            EXEC [SSISDB].[catalog].[set_execution_parameter_value]                       @execution_id,                        @object_type=30,                       @parameter_name=N'FromParent_PackageInstanceExecutionID',                       @parameter_value=@PackageExecutionLogID; -- true         /********************************************************          ********************************************************               Section: setting variables END          ********************************************************          ********************************************************/               /* This section is carried over from example code            I don't see a reason to change them yet         */         -- Set our package parameters         EXEC [SSISDB].[catalog].[set_execution_parameter_value]                       @execution_id,                        @object_type=50,                       @parameter_name=N'DUMP_ON_EVENT',                       @parameter_value=1; -- true            EXEC [SSISDB].[catalog].[set_execution_parameter_value]                       @execution_id,                        @object_type=50,                       @parameter_name=N'DUMP_EVENT_CODE',                       @parameter_value=N'0x80040E4D;0x80004005';            EXEC [SSISDB].[catalog].[set_execution_parameter_value]                       @execution_id,                        @object_type=50,                       @parameter_name=N'LOGGING_LEVEL',                       @parameter_value= 1; -- Basic            EXEC [SSISDB].[catalog].[set_execution_parameter_value]                       @execution_id,                        @object_type=50,                       @parameter_name=N'DUMP_ON_ERROR',                       @parameter_value=1; -- true                                  /********************************************************          ********************************************************               Section: EXECUTING          ********************************************************          ********************************************************/         EXEC [SSISDB].[catalog].[start_execution]                       @execution_id;         /********************************************************          ********************************************************               Section: EXECUTING END          ********************************************************          ********************************************************/               /********************************************************          ********************************************************               Section: checking execution result                      Source table:  [SSISDB].[catalog].[executions]               status:                      1: created                      2: running                      3: cancelled                      4: failed                      5: pending                      6: ended unexpectedly                      7: succeeded                      8: stopping                      9: completed          ********************************************************          ********************************************************/         if EXISTS(SELECT TOP 1 1                              FROM [SSISDB].[catalog].[executions] WITH(NOLOCK)                              WHERE [execution_id] = @execution_id                                   AND [status] NOT IN (2, 7, 9)) BEGIN                  /********************************************************                ********************************************************                      Section: logging error messages                             Source table:  [SSISDB].[internal].[operation_messages]                      message type:                             10:  OnPreValidate                               20:  OnPostValidate                               30:  OnPreExecute                               40:  OnPostExecute                               60:  OnProgress                               70:  OnInformation                               90:  Diagnostic                               110:  OnWarning                             120:  OnError                             130:  Failure                             140:  DiagnosticEx                               200:  Custom events                               400:  OnPipeline                      message source type:                             10:  Messages logged by the entry APIs (e.g. T-SQL, CLR Stored procedures)                               20:  Messages logged by the external process used to run package (ISServerExec)                               30:  Messages logged by the package-level objects                               40:  Messages logged by tasks in the control flow                               50:  Messages logged by containers (For, ForEach, Sequence) in the control flow                               60:  Messages logged by the Data Flow Task                                        ********************************************************                ********************************************************/                  INSERT INTO AUDIT.PackageInstanceExecutionOperationErrorLink                      SELECT @PackageExecutionLogID                                   ,[operation_message_id]                             FROM [SSISDB].[internal].[operation_messages] WITH(NOLOCK)                             WHERE operation_id = @execution_id                                   AND message_type IN (120, 130)                              EXEC [AUDIT].[FailPackageInstanceExecution] @PackageExecutionLogID, 'SSISDB Internal operation_messages found'                  GOTO ReturnTrueAsErrorFlag                  /********************************************************                ********************************************************                      Section: checking messages END                ********************************************************                ********************************************************/                  /* This part is not really working, so now using rowcount to pass status               --DECLARE @PackageErrorMessage NVARCHAR(4000)               --SET @PackageErrorMessage = @PackageName + 'failed with executionID: ' + CONVERT(VARCHAR(20), @execution_id)                  --RAISERROR (@PackageErrorMessage -- Message text.               --     , 18 -- Severity,               --     , 1 -- State,               --     , N'check table AUDIT.PackageInstanceExecutionErrorMessages' -- First argument.               --     );               */         END         ELSE BEGIN               GOTO ReturnFalseAsErrorFlagToSignalSuccess         END         /********************************************************          ********************************************************               Section: checking execution result END          ********************************************************          ********************************************************/  END TRY  BEGIN CATCH         DECLARE @SSISCatalogCallError NVARCHAR(MAX)         SELECT @SSISCatalogCallError = ERROR_MESSAGE()            EXEC [AUDIT].[FailPackageInstanceExecution] @PackageExecutionLogID, @SSISCatalogCallError            GOTO ReturnTrueAsErrorFlag  END CATCH;        /********************************************************   ********************************************************     Section: end result   ********************************************************   ********************************************************/  ReturnTrueAsErrorFlag:         SELECT CONVERT(BIT, 1) AS PackageExecutionErrorExists  ReturnFalseAsErrorFlagToSignalSuccess:         SELECT CONVERT(BIT, 0) AS PackageExecutionErrorExists     GO