Neste artigo, apresento quatro opções para usar o T-SQL para retornar as agendas anexadas a um trabalho do SQL Server Agent.
As opções
Você pode usar as seguintes opções de T-SQL para retornar os agendamentos de um trabalho do SQL Server Agent:
- Opção 1 :Execute o
sp_help_job
procedimento armazenado. - Opção 2 :Execute o
sp_help_schedule
procedimento armazenado. - Opção 3 :Execute o
sp_help_jobschedule
procedimento armazenado. - Opção 4 :Consulte os
sysschedules
tabela (e junte-a comsysjobschedules
esysjobs_view
).
Todas essas opções residem no msdb banco de dados e, portanto, precisam ser executados nesse banco de dados. Você pode fazer isso alternando para o msdb banco de dados primeiro, ou qualificando o objeto apropriadamente (por exemplo,
msdb.dbo.sysschedules
). Opção 1:o sp_help_job
Procedimento armazenado
Quando você chama
sp_help_job
sem argumentos, ele simplesmente retorna uma lista de trabalhos. Mas quando você passa o nome ou o ID de um trabalho, ele lista os detalhes desse trabalho, incluindo seus agendamentos. Aqui está um exemplo:
USE msdb;
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Resultado:
Isso lista o trabalho, bem como todas as etapas do trabalho, agendamentos e servidores de destino. Nesse caso, há dois agendamentos anexados ao trabalho.
Aqui está um exemplo do código ao usar o ID:
EXEC sp_help_job
@job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
Ao usar o ID, você pode omitir o nome do parâmetro, se desejar.
Exemplo:
EXEC sp_help_job '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
Sintaxe
A sintaxe completa de
sp_help_job
fica assim:sp_help_job { [ @job_id = ] job_id
[ @job_name = ] 'job_name' }
[ , [ @job_aspect = ] 'job_aspect' ]
[ , [ @job_type = ] 'job_type' ]
[ , [ @owner_login_name = ] 'login_name' ]
[ , [ @subsystem = ] 'subsystem' ]
[ , [ @category_name = ] 'category' ]
[ , [ @enabled = ] enabled ]
[ , [ @execution_status = ] status ]
[ , [ @date_comparator = ] 'date_comparison' ]
[ , [ @date_created = ] date_created ]
[ , [ @date_last_modified = ] date_modified ]
[ , [ @description = ] 'description_pattern' ]
Consulte a documentação da Microsoft para
sp_help_job
para uma explicação de cada parâmetro, bem como os valores que cada um aceita. Opção 2:o sp_help_schedule
Procedimento armazenado
O
sp_help_schedule
procedimento armazenado é projetado especificamente para retornar agendamentos. Se você executá-lo sem passar nenhum argumento, ele retornará todos os agendamentos na instância:
EXEC sp_help_schedule;
Para obter informações de um agendamento específico, passe o nome do agendamento ou seu ID:
EXEC sp_help_schedule
@schedule_name = 'Run_Sat_6AM';
Embora
sp_help_schedule
não retorna agendamentos para um trabalho específico, você pode usá-lo para retornar apenas os agendamentos anexados a um trabalho. O
@attached_schedules_only
parâmetro é bit , com um padrão de 0
, o que significa que ele retorna agendas anexadas e não anexadas. Passando um valor de 1
limita-o apenas a horários anexados. Exemplo:
EXEC sp_help_schedule
@attached_schedules_only = 1;
Outra coisa que você pode fazer é usar o
@include_description
parâmetro para especificar se deve ou não incluir a descrição do agendamento no conjunto de resultados. Consulte Usando
sp_help_schedule
no SQL Server para obter mais informações e exemplos. Opção 3:o sp_help_jobschedule
Procedimento armazenado
O
sp_help_jobschedule
procedimento armazenado retorna informações sobre o agendamento de trabalhos. Exemplo:
EXEC sp_help_jobschedule
@job_name = 'SqlAgentTest';
Isso retorna uma lista de agendamentos anexados ao trabalho especificado.
Você também pode passar o ID ou o nome de um agendamento para retornar apenas esse agendamento.
Quando você chama
sp_help_jobschedule
, você deve fornecer o nome do trabalho ou seu ID (mas não ambos) ou o ID do agendamento. Você também pode passar o schedule_name
mas apenas em combinação com o ID do trabalho ou seu nome. A combinação aceita de argumentos é um pouco complicada. Consulte Usando
sp_help_jobschedule
no SQL Server para obter uma explicação mais detalhada e mais exemplos. Opção 4:os sysschedules
tabela (e outros)
Você pode consultar os
sysschedules
table e juntá-lo com tabelas como sysjobschedules
e sysjobs_view
para retornar uma lista de trabalhos e seus agendamentos associados. Exemplo:
SELECT
jv.name,
jv.description,
s.schedule_id,
s.name,
s.freq_type,
s.freq_interval,
s.freq_subday_type,
s.freq_subday_interval,
js.next_run_date,
js.next_run_time
FROM msdb.dbo.sysjobs_view jv
INNER JOIN msdb.dbo.sysjobschedules js
ON jv.job_id = js.job_id
INNER JOIN msdb.dbo.sysschedules s
ON s.schedule_id = js.schedule_id
ORDER BY jv.name, s.name;
Resultado:
Nesse caso usei inner joins para retornar apenas agendamentos que possuem um job associado e vice-versa.
Você pode alternar para junções à direita para retornar todos os agendamentos, independentemente de estarem anexados a um trabalho, ou junções à esquerda para retornar todos os trabalhos, independentemente de terem um agendamento anexado. Ou você pode usar junções completas para simplesmente retornar tudo.