Запустить задание агента SQL Server, когда оператор возвращает значение true

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

Например:

create proc 'XYZ'
    case when a.count(*) > b.count(*) then sp_start_job 'SSIS_package_ABC' 

    wait for 'package execution completion'

Я был бы очень признателен, если бы кто-нибудь мог указать мне правильное направление, поскольку я новичок в агенте SQL Server.


person Sharvil Popli    schedule 23.03.2017    source источник
comment
Вы не можете перевернуть это? Может ли у вас быть задание агента SQL, которое запускается часто и завершается раньше, если в настоящее время условия не позволяют ему выполнять остальную часть своей работы?   -  person Damien_The_Unbeliever    schedule 23.03.2017


Ответы (1)


Используйте операторы IF вместо CASE:

DECLARE @SRC_TABLE_CNT INT,
    @DEST_TABLE_CNT INT

SELECT @SRC_TABLE_CNT = COUNT(*) FROM SOURCE_TABLE

SELECT @DEST_TABLE_CNT = COUNT(*) FROM DEST_TABLE

IF @SRC_TABLE_CNT > @DEST_TABLE_CNT
BEGIN
    sp_start_job 'SSIS_package_ABC'
END
person Radu Gheorghiu    schedule 23.03.2017