Sql-Server
在 T-SQL 中按順序執行 SSIS 作業
我們分兩部分載入 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