Как проверить, завершен ли пакет SSIS, вызванный T- SQL running - PullRequest
1 голос
/ 16 июня 2020

Я хочу ИСПОЛЬЗОВАТЬ пакет SSIS для данных ETL в течение нескольких дней, я написал несколько T- SQL для вызова пакета SSIS, принцип заключается в том, что ETL в первый день завершен, а затем может работать во второй день .. .

Компонент «Выполнить SQL задача» ниже находится в контейнере для l oop, а 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, это просто демонстрация, но в реальном проекте я не знаю, сколько времени пакет SSIS запускается указанным выше T- SQL потратит, поэтому я не думаю, что WAITFOR DELAY - хорошее решение, для этого примера есть способ проверить, завершен ли пакет SSIS в T- SQL, чтобы я мог напишите после него какой-нибудь другой код, но в зависимости от того, завершен ли запуск пакета SSIS выше, например, выполните некоторые процедуры или вызовите другие пакеты SSIS.

1 Ответ

1 голос
/ 16 июня 2020

Используйте параметр SYNCHRONIZED перед выполнением пакета:

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

Затем вместо пакета, работающего в фоновом режиме (асинхронно), он запускается синхронно, и, следовательно, пакет T- SQL не завершится, пока не выполнит задачу SSIS. Кроме того, в результате SSISDB.catalog.start_execution вернет успех пакета, а не успешный запуск указанного пакета.

...