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

3 maneiras de retornar uma lista de trabalhos do SQL Server Agent (T-SQL)


Geralmente, a maneira mais rápida de obter uma lista de trabalhos do SQL Server Agent é simplesmente expandir o nó do SQL Server Agent no SSMS Object Explorer.

Mas esse não é o único caminho. E dependendo do seu ambiente, pode até não ser uma opção. Se você não tiver o SSMS ou uma ferramenta de banco de dados que permita ver os trabalhos do SQL Server Agent, talvez seja necessário usar o T-SQL.

Neste artigo, apresento três opções para retornar uma lista de trabalhos do SQL Server Agent ao usar o T-SQL.

As opções


Você pode usar as seguintes opções para retornar uma lista de trabalhos do SQL Server Agent com T-SQL:
  • Opção 1 :Execute o sp_help_job procedimento armazenado.
  • Opção 2 :Consulte o sysjobs_view visualizar.
  • Opção 3 :Consulte os sysjobs mesa diretamente.

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.sysjobs_view ).

Opção 1:sp_help_job


Ao usar sp_help_job para retornar uma lista de trabalhos do SQL Server Agent, basta executá-la sem nenhum argumento.

Assim:
USE msdb;
EXEC sp_help_job;

Nesse caso, mudei para o msdb banco de dados primeiro, o que significava que eu não precisava qualificar totalmente o procedimento com o nome e o esquema do banco de dados.

Aqui está o que parece quando eu uso o SSMS para executá-lo no meu ambiente de teste:

Devolver um trabalho específico


Você pode usar o mesmo procedimento armazenado para retornar os detalhes de qualquer um desses trabalhos. Quando você faz isso, obtém muito mais detalhes do que obtém ao listar todos os trabalhos.

Para obter os detalhes do trabalho, você precisa fornecer o nome ou ID do trabalho.

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:o sysjobs_view Visualizar


Você pode usar o sysjobs_view para retornar uma lista de trabalhos do SQL Server Agent.

Exemplo:
SELECT * FROM msdb.dbo.sysjobs_view;

Nesse caso, qualifiquei o nome da visualização com o banco de dados e o esquema.

Esta visualização retorna um conjunto de resultados semelhante (mas ligeiramente diferente) para o sp_help_job procedimento armazenado quando usado sem argumentos.

Se você quiser detalhes do trabalho, como etapas, cronogramas, etc., precisará juntá-lo a outras tabelas, como sysjobsteps , sysjobschedules , sysjobactivity , sysjobhistory , etc

Aqui está um exemplo de como juntá-lo com as sysjobsteps tabela:
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.

Opção 3:os sysjobs Tabela


Aqui está um exemplo de como ir diretamente para os sysjobs tabela:
SELECT * FROM msdb.dbo.sysjobs;

Assim como na visualização, se você quiser detalhes do trabalho, como etapas, cronogramas, etc., precisará juntá-lo a outras tabelas, como sysjobsteps , sysjobschedules , sysjobactivity , sysjobhistory , etc

Geralmente, é recomendável consultar a exibição em vez da tabela diretamente.