sql >> Base de Datos >  >> RDS >> Sqlserver

3 formas de devolver una lista de trabajos del Agente SQL Server (T-SQL)

A menudo, la forma más rápida de obtener una lista de trabajos del Agente SQL Server es simplemente expandir el nodo del Agente SQL Server en el Explorador de objetos de SSMS.

Pero esa no es la única manera. Y dependiendo de su entorno, es posible que ni siquiera sea una opción. Si no tiene SSMS o una herramienta de base de datos que le permita ver los trabajos del Agente SQL Server, es posible que deba usar T-SQL en su lugar.

En este artículo, presento tres opciones para devolver una lista de trabajos del Agente SQL Server cuando se usa T-SQL.

Las opciones

Puede usar las siguientes opciones para devolver una lista de trabajos del Agente SQL Server con T-SQL:

  • Opción 1 :Ejecute el sp_help_job procedimiento almacenado.
  • Opción 2 :consulta la sysjobs_view ver.
  • Opción 3 :consulta los sysjobs mesa directamente.

Todas estas opciones residen en msdb base de datos y, por lo tanto, deben ejecutarse en esa base de datos. Puede hacerlo cambiando a msdb base de datos primero, o calificando el objeto apropiadamente (por ejemplo, msdb.dbo.sysjobs_view ).

Opción 1:sp_help_job

Al usar sp_help_job para devolver una lista de trabajos del Agente SQL Server, simplemente ejecútelo sin ningún argumento.

Así:

USE msdb;
EXEC sp_help_job;

En este caso cambié a msdb base de datos primero, lo que significaba que no necesitaba calificar completamente el procedimiento con el nombre y el esquema de la base de datos.

Esto es lo que parece cuando uso SSMS para ejecutarlo en mi entorno de prueba:

Devolver un trabajo específico

Puede usar el mismo procedimiento almacenado para devolver los detalles de cualquiera de esos trabajos. Cuando hace eso, obtiene muchos más detalles que cuando enumera todos los trabajos.

Para obtener los detalles del trabajo, debe proporcionar el nombre o ID del trabajo.

He aquí un ejemplo:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Resultado:

Esto enumera el trabajo, así como los pasos del trabajo, los horarios y los servidores de destino.

Aquí hay un ejemplo del código cuando se usa la ID:

EXEC sp_help_job 
	@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';

Al usar la ID, puede omitir el nombre del parámetro si lo desea.

Ejemplo:

EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';

Sintaxis

La sintaxis completa de sp_help_job va así:

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 la documentación de Microsoft para sp_help_job para una explicación de cada parámetro, así como los valores que acepta cada uno.

Opción 2:La sysjobs_view Ver

Puede usar sysjobs_view para devolver una lista de trabajos del Agente SQL Server.

Ejemplo:

SELECT * FROM msdb.dbo.sysjobs_view;

En este caso califiqué el nombre de la vista con la base de datos y el esquema.

Esta vista devuelve un conjunto de resultados similar (pero ligeramente diferente) al sp_help_job procedimiento almacenado cuando se usa sin argumentos.

Si desea detalles del trabajo, como pasos, horarios, etc., deberá unirlo con otras tablas, como sysjobsteps , sysjobschedules , sysjobactivity , sysjobhistory , etc.

Aquí hay un ejemplo de unirlo con sysjobsteps tabla:

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;

Aquí está el resultado en mi entorno de prueba:

Dado que se trata de una combinación izquierda, incluye trabajos que no tienen ningún paso (consulte el NULL en el step_id y step_name columnas para el trabajo llamado TestJob ).

Para limitarlo solo a aquellos trabajos con pasos, use una unión interna.

Opción 3:Los sysjobs Mesa

Aquí hay un ejemplo de cómo ir directamente a sysjobs tabla:

SELECT * FROM msdb.dbo.sysjobs;

Al igual que con la vista, si desea detalles del trabajo, como pasos, horarios, etc., deberá unirlo con otras tablas, como sysjobsteps , sysjobschedules , sysjobactivity , sysjobhistory , etc.

Por lo general, se recomienda consultar la vista en lugar de la tabla directamente.