Published on

September 1, 2021

Выполнение пакетов SSIS из приложений

Проблема:

Наша организация хочет использовать возможности пакетов SSIS напрямую из наших приложений. В настоящее время мы развертываем и выполняем пакеты SSIS из заданий SQL Server Agent, но мы хотим иметь возможность выполнять их из наших приложений и указывать параметры пакета во время выполнения.

Решение:

SQL Server Integration Services (SSIS) предоставляет базу данных SSISDB, которая включает хранимые процедуры и представления для работы с проектами SSIS и развернутыми пакетами в каталоге Integration Services. Для достижения этой цели мы можем создать SQL-объекты, которые позволят нам выполнять пакет SSIS из каталога с использованием хранимой процедуры. Такой подход позволяет нам повторно использовать существующие пакеты SSIS и выполнять их в различных точках нашего приложения.

Вот пример хранимой процедуры, которая может выполнять пакет SSIS, развернутый в каталоге SSIS:

CREATE PROCEDURE [dbo].[ExecuteSSISPackage]
    @PACKAGE_NAME NVARCHAR(128),
    @PARAMETER_NAME NVARCHAR(128),
    @PARAMETER_VALUE NVARCHAR(128)
AS
BEGIN
    DECLARE @EXECUTION_ID BIGINT;

    -- Создание выполнения пакета
    EXEC [SSISDB].[catalog].[create_execution]
        @folder_name = 'MyFolder',
        @project_name = 'MyProject',
        @package_name = @PACKAGE_NAME,
        @execution_id = @EXECUTION_ID OUTPUT;

    -- Установка значения параметра пакета
    EXEC [SSISDB].[catalog].[set_execution_parameter_value]
        @execution_id = @EXECUTION_ID,
        @object_type = 30, -- параметр пакета
        @parameter_name = @PARAMETER_NAME,
        @parameter_value = @PARAMETER_VALUE;

    -- Запуск выполнения
    EXEC [SSISDB].[catalog].[start_execution]
        @execution_id = @EXECUTION_ID;
END

Для выполнения хранимой процедуры можно использовать следующий T-SQL:

DECLARE @P_EXECUTION_ID BIGINT;

EXEC [dbo].[ExecuteSSISPackage]
    @PACKAGE_NAME = 'MyPackage',
    @PARAMETER_NAME = 'MyParameter',
    @PARAMETER_VALUE = 'MyValue';

SELECT @P_EXECUTION_ID;

SELECT [start_time], [end_time], [status]
FROM [SSISDB].[catalog].[executions]
WHERE [execution_id] = @P_EXECUTION_ID;

Эта хранимая процедура создает выполнение для указанного пакета SSIS, устанавливает значение для параметра пакета и запускает выполнение. Идентификатор выполнения возвращается в качестве выходного параметра, который можно использовать для проверки статуса выполнения в каталоге SSIS.

Используя такой подход, мы можем выполнять пакеты SSIS из наших приложений и предоставлять значения параметров во время выполнения. Это позволяет автоматизировать процессы и интегрировать функциональность SSIS в наши приложения.

Заключение:

Выполнение пакетов SSIS из приложений можно достичь, используя базу данных SSISDB и создавая хранимую процедуру для выполнения пакетов из каталога. Такой подход позволяет повторно использовать существующие пакеты SSIS и обеспечивает гибкость в указании значений параметров во время выполнения.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.