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_jobprocedimento armazenado. - Opção 2 :Execute o
sp_help_jobstepprocedimento armazenado. - Opção 3 :Consulte as
sysjobstepstabela (e junte-a comsysjobs_viewse 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.