Запустить пакет SSIS запускается, когда таблица заполнена - PullRequest
1 голос
/ 06 апреля 2019

У меня следующий процесс:

  1. Внешний процесс заполняет промежуточную таблицу с именем: staging_table.
  2. Что-то для запуска пакета служб SSIS
  3. Пакет служб SSIS выполняет бизнес-логику и усекает staging_table.
  4. Затем процесс начинается снова.

Внешний процесс не выполняется в определенное время, поэтому создание задания для запуска в определенное время не является решением. Я хочу, чтобы пакет выполнялся, когда таблица заполнена. Можно ли выполнить пакет служб SSIS, когда таблица заполнена? Если это возможно, то как это будет работать и что нужно делать? К вашему сведению, это версия SQL Server 2008 R2.

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

«Я хочу, чтобы пакет выполнялся при заполнении таблицы»

Это немного расплывчато, но вы можете создать AFTER INSERT TRIGGER:

create trigger staging_table_trigger
on staging_table after insert as
begin
    Declare @execution_id bigint;
    EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Package.dtsx',
        @execution_id=@execution_id OUTPUT,
        @folder_name=N'Deployed Projects',
        @project_name=N'Integration Services Project1',
        @use32bitruntime=False,
        @reference_id=Null;

    --params if any
    DECLARE @var0 smallint = 1
    EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id,
       @object_type=50,
       @parameter_name=N'LOGGING_LEVEL',
       @parameter_value=@var0;

     -- run package
     EXEC [SSISDB].[catalog].[start_execution] @execution_id;
end

Запуск пакета служб SSIS из SSMS с помощью Transact-SQL


Обратите внимание, что этот механизм не подходит для высококонкурентной OLTP-системы, в таком случае вы должны рассмотреть асинхронную обработку с SERVICE BROKER.

Дополнительная информация: Пример расширенного компонента Service Broker: асинхронные триггеры от Eitan Blumin

0 голосов
/ 09 апреля 2019

Было бы несколько способов сделать это. Это один из способов, который я реализовал несколько раз.

Это зависит от усечения таблицы в конце пакета служб SSIS.

Добавьте Execute SQL Task к вашему пакету служб SSIS, который выполняет подсчет строк в вашей таблице. Верните это количество в переменную SSIS. Пусть Precedent Constraint, который выходит из Execute SQL Task, проверяет значение переменной и переходит к остальной логике пакета, только если счетчик больше нуля. В противном случае остановитесь там.

Тогда просто запланируйте выполнение задания так часто, как это имеет смысл. Если таблица заполняется каждый день, возможно, выполняйте работу каждые несколько часов. Если он заполняется каждый час, возможно, запускайте работу каждые несколько минут.

Затраты на подсчет записей в пустой таблице минимальны, поэтому избыточные прогоны не окажут негативного влияния на вашу среду.

...