Neste artigo, apresento três opções para retornar as etapas de um trabalho do SQL Server Agent ao usar o T-SQL.
As opções
Você pode usar as seguintes opções de T-SQL para retornar as etapas de um trabalho do SQL Server Agent:
- Opção 1 :Execute o
sp_help_job
procedimento armazenado. - Opção 2 :Execute o
sp_help_jobstep
procedimento armazenado. - Opção 3 :Consulte as
sysjobsteps
tabela (e junte-a comsysjobs_view
se necessário).
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.sysjobsteps
). Opção 1:sp_help_job
Quando você chama
sp_help_job
sem argumentos, ele simplesmente retorna uma lista de trabalhos. Mas quando você passa o nome ou ID de um trabalho, ele lista os detalhes desse trabalho, incluindo suas etapas. Aqui está um exemplo:
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Resultado:
Isso lista o trabalho, bem como todas as etapas do trabalho, agendamentos e servidores de destino.
Aqui está um exemplo do código ao usar o ID:
EXEC sp_help_job
@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';
Ao usar o ID, você pode omitir o nome do parâmetro, se desejar.
Exemplo:
EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';
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:sp_help_jobstep
O
sp_help_jobstep
procedimento armazenado é projetado especificamente para retornar as etapas de um trabalho. Mas isso é tudo o que retorna. Portanto, se você não quiser ver nenhuma programação e coisas do servidor de destino, etc., isso pode ser o que você está procurando.
Você pode passar
sp_help_jobstep
o nome do trabalho ou seu ID (mas não ambos). Aqui está um exemplo:
EXEC sp_help_jobstep
@job_name = 'SqlAgentTest';
E aqui está o resultado em um trabalho de duas etapas:
Você também pode especificar um ID de etapa se desejar que apenas uma etapa específica seja retornada. Você ainda precisa especificar para qual trabalho é (com seu ID ou nome).
Aqui está um exemplo de especificação da segunda etapa no trabalho:
EXEC sp_help_jobstep
@job_name = 'SqlAgentTest',
@step_id = 2;
O ID da etapa precisa realmente existir para esse trabalho. Por exemplo, especificando um ID de etapa de
3
para o trabalho acima resulta em um erro. Opção 3:as sysjobsteps
Tabela
Outra opção é executar uma consulta em
sysjobsteps
tabela. Esta tabela contém as etapas de todos os trabalhos, portanto, se você quiser apenas as etapas de um trabalho específico, precisará passar o ID do trabalho.
Aqui está um exemplo de consulta de
sysjobsteps
tabela para as etapas de um trabalho específico:SELECT * FROM msdb.dbo.sysjobsteps
WHERE job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
Isso retorna um resultado semelhante ao
sp_help_jobstep
procedimento. Se você quiser que alguns dos detalhes do trabalho sejam retornados (como seu nome), você pode executar uma junção entre
sysjobsteps
e sysjobs_view
. Exemplo:
SELECT
jv.name,
jv.description,
jv.start_step_id,
js.step_id,
js.step_name
FROM msdb.dbo.sysjobs_view jv
LEFT JOIN msdb.dbo.sysjobsteps js
ON jv.job_id = js.job_id;
Aqui está o resultado no meu ambiente de teste:
Por ser uma junção esquerda, ela inclui trabalhos que não têm etapas (consulte o
NULL
no step_id
e step_name
colunas para o trabalho chamado TestJob
). Para limitá-lo apenas aos trabalhos com etapas, use uma junção interna.