Eu tenho vários trabalhos do SQL Server Agent que devem ser executados sequencialmente. Para manter uma boa visão geral dos trabalhos que devem ser executados, criei um trabalho principal que chama os outros trabalhos com uma chamada para EXEC msdb.dbo.sp_start_job N'TEST1'
. A sp_start_job
finalização é instantânea (Etapa 1 do trabalho), mas quero que meu trabalho principal aguarde até que o trabalho TEST1
termine antes de chamar o próximo trabalho.
Então, eu escrevi este pequeno script que começa a ser executado logo após o trabalho ser chamado (Etapa 2 do trabalho) e força o trabalho principal a esperar até que o sub-trabalho termine:
WHILE 1 = 1
BEGIN
WAITFOR DELAY '00:05:00.000';
SELECT *
INTO #jobs
FROM OPENROWSET('SQLNCLI', 'Server=TESTSERVER;Trusted_Connection=yes;',
'EXEC msdb.dbo.sp_help_job @job_name = N''TEST1'',
@execution_status = 0, @job_aspect = N''JOB''');
IF NOT (EXISTS (SELECT top 1 * FROM #jobs))
BEGIN
BREAK
END;
DROP TABLE #jobs;
END;
Isso funciona bem o suficiente. Mas tive a sensação de que WHILE 1 = 1
soluções mais inteligentes e / ou mais seguras ( ?) Devem ser possíveis.
Estou curioso sobre o seguinte, espero que você possa me fornecer algumas idéias:
- Quais são os problemas com essa abordagem?
- Você pode sugerir uma maneira melhor de fazer isso?
(Postei essa pergunta no StackOverflow primeiro, porque estava focado na melhoria do código. Ainda válido. Mas meu palpite é que as pessoas aqui em geral têm coisas mais inteligentes a dizer sobre por que não devo tentar fazer isso da maneira que eu faço '' estou fazendo isso agora ou forneça boas alternativas.)
EDIT (25 de julho)
Aparentemente, não há muito errado com o meu script, de acordo com o baixo número de respostas que apontam problemas com ele :-) A alternativa para esse tipo de script parece ser o uso de uma ferramenta projetada para esses scripts. tarefas (como SQL Sentry Event Manager ou ...) - ou para escrever você mesmo essa ferramenta. Não compraremos essa ferramenta na minha empresa atual, então, por enquanto, continuarei com o script.