Preciso executar um trabalho todo dia 16. Mas se for "sábado" ou "domingo" deve ser executado no próximo dia útil.
Não importa se é feriado ou não. Eu só preciso executá-lo.
Eu poderia fazer algo assim e separar em passos, e só passar para o próximo passo se ele rodar sem erro:
--Step 1 - Verify if it is 16
IF day(getdate()) <> 16
RAISERROR ('Job runs only day 16.',16,1)
--Step 2 - verify if its saturday of sunday
IF DATEPART(weekday,getdate()) IN ( 7,1 )
RAISERROR ('Job will run on the next business day.',16,1)
Eu criaria 2 etapas com essas consultas, mas isso não funcionaria, pois, digamos que o próximo dia útil seja 18, a primeira etapa gerará um erro.
Tem como agendar algo assim?
Não é bonito, mas você pode agrupar todas as suas condições em
CASE
algo assim:Coloque isso em um trabalho agendado que é executado nos dias 16, 17 e 18 de cada mês, e você ficará bem.