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

3 formas de obtener los pasos de trabajo de un trabajo del Agente SQL Server (T-SQL)

En este artículo, presento tres opciones para devolver los pasos de un trabajo del Agente SQL Server cuando se usa T-SQL.

Las opciones

Puede usar las siguientes opciones de T-SQL para devolver los pasos de un trabajo del Agente SQL Server:

  • Opción 1 :Ejecute el sp_help_job procedimiento almacenado.
  • Opción 2 :Ejecute el sp_help_jobstep procedimiento almacenado.
  • Opción 3 :consulta los sysjobsteps tabla (y únala con sysjobs_view si es requerido).

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

Opción 1:sp_help_job

Cuando llamas a sp_help_job sin ningún argumento, simplemente devuelve una lista de trabajos. Pero cuando pasa el nombre o ID de un trabajo, enumera los detalles de ese trabajo, incluidos sus pasos.

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:sp_help_jobstep

El sp_help_jobstep El procedimiento almacenado está diseñado específicamente para devolver los pasos de un trabajo. Pero eso es todo lo que devuelve.

Entonces, si no desea ver nada de la programación y el servidor de destino, etc., esto podría ser lo que está buscando.

Puede pasar sp_help_jobstep el nombre del trabajo o su ID (pero no ambos).

He aquí un ejemplo:

EXEC sp_help_jobstep
	@job_name = 'SqlAgentTest';

Y así es como se ve el resultado en un trabajo de dos pasos:

También puede especificar un ID de paso si solo desea que se devuelva un paso específico. Sin embargo, aún debe especificar para qué trabajo es (ya sea con su ID o nombre).

Aquí hay un ejemplo de cómo especificar el segundo paso en el trabajo:

EXEC sp_help_jobstep
	@job_name = 'SqlAgentTest', 
	@step_id = 2;

El ID del paso debe existir realmente para ese trabajo. Por ejemplo, especificando un ID de paso de 3 para el trabajo anterior da como resultado un error.

Opción 3:Los sysjobsteps Mesa

Otra opción es ejecutar una consulta contra sysjobsteps mesa.

Esta tabla contiene los pasos de todos los trabajos, por lo que si solo desea los pasos para un trabajo específico, deberá pasar la identificación del trabajo.

Aquí hay un ejemplo de consulta de sysjobsteps tabla para los pasos de un trabajo específico:

SELECT * FROM msdb.dbo.sysjobsteps
WHERE job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';

Esto devuelve un resultado similar al sp_help_jobstep procedimiento.

Si desea que se devuelvan algunos de los detalles del trabajo (como su nombre), puede ejecutar una unión entre sysjobsteps y sysjobs_view .

Ejemplo:

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.