Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

sp_add_schedule vs sp_add_jobschedule no SQL Server:Qual é a diferença?


Se você está no processo de criação de um trabalho do SQL Server Agent com T-SQL, pode estar se perguntando se deve criar seu agendamento com o sp_add_schedule procedimento armazenado ou o sp_add_jobschedule procedimento.

Aqui está uma explicação rápida da diferença entre esses dois procedimentos.

A diferença

  • O sp_add_schedule procedimento cria um agendamento, mas não o anexa a nenhum trabalho. Para fazer isso, você precisa usar o sp_attach_schedule procedimento.
  • O sp_add_jobschedule procedimento cria o cronograma e o anexa a um determinado trabalho, tudo de uma vez.

Portanto, sp_add_jobschedule pode ser usado se você precisar criar um novo agendamento para um trabalho específico e esse trabalho já existir. Se você estiver criando uma programação para vários trabalhos e nenhum deles existir ainda, use sp_add_schedule . Então você pode usar sp_attach_schedule para anexá-lo aos seus trabalhos mais tarde.

Mas isso não quer dizer que você não pode usar sp_add_schedule em vez de sp_add_jobschedule se o trabalho já existir.

Usando sp_add_schedule (em conjunto com sp_attach_schedule ) permite separar o processo de criação de agendamentos e anexá-los aos trabalhos. Você ainda pode usar esse combo mesmo ao criar um único trabalho com um único agendamento.

Em outras palavras, você pode usar sp_add_schedule em vez de sp_add_jobschedule para todos os seus trabalhos do SQL Server Agent.

Exemplo

O sp_add_jobschedule Procedimento


O sp_add_jobschedule procedimento cria um agendamento para um determinado trabalho do SQL Server Agent. Ao chamar esse procedimento, você deve fornecer o nome ou ID de um trabalho ao qual deseja se candidatar.

Basicamente, esse procedimento cria um cronograma e o anexa a um único trabalho.

Aqui está um exemplo de como criar um trabalho e usar o sp_add_jobschedule procedimento armazenado:
EXEC sp_add_jobschedule 
    @job_name = N'BackupMusicDB',
    @name = N'Weekly_Sun_3AM',
    @freq_type = 8,
    @freq_interval = 1,
    @freq_recurrence_factor = 1,
    @active_start_time = 30000;

Quando você olha para o sp_add_jobschedule procedimento, o @job_name argumento fornece o nome do trabalho. O @name argumento fornece o nome que você deseja dar ao agendamento.

O sp_add_schedule Procedimento


O sp_add_schedule procedimento permite que você crie um agendamento sem precisar especificar um trabalho ao qual anexá-lo.

Esse procedimento cria o agendamento, mas não o anexa a nenhum trabalho. Para anexá-lo a um trabalho, você deve usar o sp_attach_schedule procedimento.

Aqui está um exemplo:
EXEC sp_add_schedule 
    @schedule_name = N'RunDailyAM',
    @freq_type = 4,
    @freq_interval = 4,
    @active_start_time = 041000;
GO  
EXEC sp_attach_schedule  
   @job_name = N'BackupPetHotelDB',  
   @schedule_name = N'RunDailyAM';  
GO

Quando você usa sp_attach_schedule , você deve fornecer o nome do trabalho ou seu ID (mas não ambos), bem como o nome ou ID do agendamento (mas não ambos).

Anexando um sp_add_jobschedule Agenda


É importante observar que sp_attach_schedule pode anexar agendas que foram criadas com sp_add_schedule e com sp_add_jobschedule .

Em outras palavras, criar uma agenda com sp_add_jobschedule não o restringe apenas ao trabalho que você especificou ao criar o agendamento. ele ainda está disponível para ser anexado a outros trabalhos posteriormente usando sp_attach_schedule .