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 consysjobs_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.