Já sei como agendar trabalhos mensais usando SQL Server Agent > Jobs
, agora gostaria de aprender como agendar esse trabalho usando T-SQL.
Eu sei como agendar um trabalho diariamente em um horário específico:
CREATE PROCEDURE MyTask
AS
BEGIN
SET NOCOUNT ON;
-- Now is set to run evry day at 23:00
-- But I need to run it every 1th of the month
declare @delayTime nvarchar(50)
set @delayTime = '23:00'
while 1 = 1
begin
waitfor time @delayTime
begin
-- Here the query I want to run every month
select * from AdventureWorks2012.dbo.AWBuildVersion;
end
end
END
-- Sets stored procedure for automatic execution.
sp_procoption @ProcName = 'MyTask',
@OptionName = 'startup',
@OptionValue = 'on'
Neste guia da Microsoft vejo que posso usar @freq_type = 16
, mas não sei como configurá-lo e um exemplo seria muito apreciado
Para agendar um trabalho para ser executado uma vez por mês, neste caso, à meia-noite do primeiro dia:
Na sua pergunta, você faz referência a
sp_procoption
. A documentação para esse comando afirma (destacando a minha):Isso não tem nada a ver com o outro link que você postou que faz referência a sp_add_schedule que afirma (destacando o meu):
Cria um agendamento que pode ser usado por qualquer número de trabalhos .
Embora você possa modificar seu código existente para colocar o
waitfor
loop while dentro do loop while e verificar se o dia é 1 (primeiro dia do mês), seu procedimento só é executado quando a instância do SQL Server é inicializada. Se você não reiniciar sua instância do SQL Server com frequência, essa abordagem será problemática e não confiável.Se você deseja uma maneira relativamente confiável de executar seu procedimento armazenado mensalmente, você precisa criar um trabalho do SQL Server Agent com um agendamento mensal ou pode usar o Agendador de Tarefas do Windows e executá-lo mensalmente.