Estou trabalhando em um sistema que gera vários emails recorrentes como parte de vários trabalhos agendados no SQL Server Agent. Os e-mails contêm relatórios baseados em texto que são vagamente associados ao assunto de seus trabalhos, mas não dependem do resultado do trabalho. Quando um cliente solicita uma alteração no conteúdo do relatório ou na lista de distribuição, pode ser difícil encontrar o trabalho/etapa específico responsável por gerar o e-mail/relatório.
Para facilitar a manutenção dessas tarefas, quero criar um novo trabalho central e mover cada etapa de e-mail/relatório para esse trabalho. Eu configuraria cada etapa do trabalho para "Sair do trabalho relatando sucesso". Eu configuraria um agendamento exclusivo para cada etapa do trabalho para que os e-mails/relatórios continuem sendo gerados em seus agendamentos normais. Por exemplo, a etapa 1 seria executada diariamente às 7h. A etapa 2 seria executada aos sábados e domingos ao meio-dia. E assim por diante.
Quando fui criar um cronograma, não consegui encontrar uma maneira de especificar em qual etapa começar. Eu sei que msdb.dbo.sp_start_job
aceita um @step_name
parâmetro. Da mesma forma, o SQL Server Agent me permite escolher uma etapa para iniciar manualmente um trabalho por meio da interface do usuário. Existe uma maneira de especificar a etapa inicial de um agendamento ou estou limitado a iniciar com a etapa inicial configurada (padrão) conforme listado no trabalho?
Um agendamento não tem dependências em um trabalho. Na verdade, uma agenda é um recurso compartilhado que pode ser usado por vários trabalhos.
Não existe uma programação "local". Não há nada que impeça você, é claro, de ter apenas um emprego com um cronograma.
Ou seja, não há lugar na arquitetura do Agente para um agendamento para iniciar uma determinada etapa do trabalho.
Então, sim, você está limitado a ter um agendamento iniciando o trabalho na etapa definida no trabalho.
Do jeito que li seu cenário, não há nada em comum entre as etapas, exceto que elas compartilham o mesmo subsistema de seu aplicativo (ou como você o expressaria). Eu adoraria que o agente tivesse alguma funcionalidade de namespace/pasta para trabalhos, mas não. IMO, o mais próximo que você pode chegar é ter um padrão de nomenclatura saudável para seus trabalhos, usando algum prefixo no nome do trabalho para identificar a qual sistema cada conjunto de trabalhos pertence. E, claro, comentários dentro do trabalho.
Agenda é entidade independente. Não podemos mapeá-lo com as etapas do trabalho. Mas você pode alcançar seus objetivos de outras maneiras.
Crie outro trabalho e tenha uma etapa para executar o trabalho necessário conforme abaixo. E agende conforme seu desejo.
Como parte de sua etapa de trabalho, verifique a data e hora atuais, execute ou pule esse código de acordo com sua necessidade.