如何检查 T-SQL 运行 调用的 SSIS 包是否完成

How to check if SSIS package called by T-SQL running finished

这几天想用SSIS包做ETL数据,写了一些T-SQL调用SSIS包,原理是第一天做完ETL就可以工作了第二天...

下面的 "Execute SQL task" 组件在 for 循环容器下,SQL 像这样:

Declare @execution_id bigint
EXEC [SSISDB].[catalog].[create_execution] @package_name=N'MAIN.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'RE_RUN_LOGIC_DEMO', @project_name=N'BUSINESS_ETL_STEVEN', @use32bitruntime=False, @reference_id=Null
Select @execution_id
DECLARE @var0 smallint = 1
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id,  @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0
EXEC [SSISDB].[catalog].[start_execution] @execution_id

--WAITFOR DELAY '00:00:07.000'    

问题是,如果我注释掉上面代码的最后一行,ETL 不能按预期工作,我必须添加 WAITFOR 语句,这只是一个演示,但在实际项目中,我没有不知道上面T-SQL调用的SSIS包要花多少时间,所以我不认为WAITFOR DELAY是一个好的解决方案,对于这个例子,有没有办法检查SSIS包是否是在T-SQL中完成或未完成,以便我可以在它之后编写一些其他代码但取决于上面的SSIS包运行完成,例如,执行一些程序或调用一些其他SSIS包。

在执行包之前使用SYNCHRONIZED参数:

EXEC SSISDB.catalog.set_execution_parameter_value @execution_id, @object_type = 50, @parameter_name = N'SYNCHRONIZED', @parameter_value  = 1;

然后,而不是包 运行ning 在后台(异步)它是 运行 同步,因此 T-SQL 批处理直到 SSIS 任务才会完成做。另外,结果SSISDB.catalog.start_execution会return打包成功,而不是启动表示打包成功。