Sql-Server

在 T-SQL 中按順序執行 SSIS 作業

  • November 24, 2018

我們分兩部分載入 ETL 數據,首先使用 SSIS 包,然後使用儲存過程。

在下面的腳本中,Part2 儲存過程將在 SSIS Part1 完成之前執行。如何讓 Part2 儲存過程僅在 Part1 SSIS 完成後執行?

有沒有辦法在 T-SQL 中執行此操作?如果包完整,我們是否應該使用延遲功能並每隔幾分鐘使用 SSIS dmv SSISDB.catalog.executions 檢查一次?還有其他方法嗎?

背景:我們可以將 sproc 放在 SSIS 之後的控制流箭頭中。但是,我們公司不想這樣做。我們更像是一家基於腳本的公司。另外試圖避免 SQL 代理作業。目前,QA 部門需要一種方法來執行項目,而無需創建多個作業。我們為父級包創建了作業,但不想為我們的 500 多個 SSIS 和儲存過程創建單元作業。

--Part 1
EXEC [SSISDB].[catalog].[create_execution] 
              @package_name=N'Customer_StageTable_Part1_Insert.dtsx'
              , @project_name=N'Datawarehouse'
              , @folder_name=N'Datawarehousefolder'
              , @use32bitruntime=False
              , @reference_id= 2
              , @execution_id=@execution_id OUTPUT

select @execution_id

--Part 2
execute Customer_StageTable_Part2_Insert

https://www.sqlshack.com/execute-deployed-package-ssis-catalog-various-options/

您可以指定包執行是 SYNCRONIZED 以在 TSQL 中等待,直到它完成使用$$ SSISDB $$.$$ catalog $$.$$ set_execution_parameter_value $$

所以像:

--Part 1
EXEC SSISDB.catalog.create_execution
              @package_name=N'Customer_StageTable_Part1_Insert.dtsx'
              , @project_name=N'Datawarehouse'
              , @folder_name=N'Datawarehousefolder'
              , @use32bitruntime=False
              , @reference_id= 2
              , @execution_id=@execution_id OUTPUT

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

--Start the package and wait for it to complete
EXEC SSISDB.catalog.start_execution @execution_id;

--Part 2
execute Customer_StageTable_Part2_Insert

參見,例如http://www.ssistalk.com/2012/07/24/quick-tip-run-ssis-2012-packages-synchronously-and-other-execution-options/

引用自:https://dba.stackexchange.com/questions/223313