Dans cet article, je présente trois options pour renvoyer les étapes d'un travail de l'Agent SQL Server lors de l'utilisation de T-SQL.
Les options
Vous pouvez utiliser les options T-SQL suivantes pour renvoyer les étapes d'un travail de l'Agent SQL Server :
- Option 1 :Exécute le
sp_help_job
procédure stockée. - Option 2 :Exécutez le
sp_help_jobstep
procédure stockée. - Option 3 :Interroger les
sysjobsteps
table (et joignez-la avecsysjobs_view
si nécessaire).
Toutes ces options résident dans le msdb base de données, et doivent donc être exécutés dans cette base de données. Vous pouvez le faire en basculant vers le msdb base de données d'abord, ou en qualifiant l'objet de manière appropriée (par exemple, msdb.dbo.sysjobsteps
).
Option 1 :sp_help_job
Lorsque vous appelez sp_help_job
sans aucun argument, il renvoie simplement une liste de travaux. Mais lorsque vous transmettez le nom ou l'ID d'une tâche, il répertorie les détails de cette tâche, y compris ses étapes.
Voici un exemple :
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Résultat :
Cela répertorie la tâche, ainsi que toutes les étapes de la tâche, les planifications et les serveurs cibles.
Voici un exemple de code lors de l'utilisation de l'ID :
EXEC sp_help_job
@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';
Lorsque vous utilisez l'ID, vous pouvez omettre le nom du paramètre si vous le souhaitez.
Exemple :
EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';
Syntaxe
La syntaxe complète de sp_help_job
va comme ceci :
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' ]
Voir la documentation de Microsoft pour sp_help_job
pour une explication de chaque paramètre, ainsi que les valeurs que chacun accepte.
Option 2 :sp_help_jobstep
L'sp_help_jobstep
La procédure stockée est conçue spécifiquement pour renvoyer les étapes d'un travail. Mais c'est tout ce qu'il retourne.
Donc, si vous ne voulez pas voir les éléments de planification et de serveur cible, etc., cela pourrait être ce que vous recherchez.
Vous pouvez passer sp_help_jobstep
le nom du travail ou son ID (mais pas les deux).
Voici un exemple :
EXEC sp_help_jobstep
@job_name = 'SqlAgentTest';
Et voici à quoi ressemble le résultat d'une tâche en deux étapes :
Vous pouvez également spécifier un ID d'étape si vous souhaitez uniquement renvoyer une étape spécifique. Cependant, vous devez toujours spécifier à quel travail il s'adresse (soit avec son ID, soit avec son nom).
Voici un exemple de spécification de la deuxième étape de la tâche :
EXEC sp_help_jobstep
@job_name = 'SqlAgentTest',
@step_id = 2;
L'ID d'étape doit réellement exister pour cette tâche. Par exemple, en spécifiant un ID d'étape de 3
pour la tâche ci-dessus génère une erreur.
Option 3 :Les sysjobsteps
Tableau
Une autre option consiste à exécuter une requête sur les sysjobsteps
table.
Ce tableau contient les étapes de toutes les tâches, donc si vous ne voulez que les étapes pour une tâche spécifique, vous devrez transmettre l'ID de la tâche.
Voici un exemple d'interrogation des sysjobsteps
tableau pour les étapes d'un travail spécifique :
SELECT * FROM msdb.dbo.sysjobsteps
WHERE job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
Cela renvoie un résultat similaire au sp_help_jobstep
procédure.
Si vous souhaitez que certains détails du travail soient renvoyés (comme son nom), vous pouvez exécuter une jointure entre sysjobsteps
et sysjobs_view
.
Exemple :
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;
Voici le résultat dans mon environnement de test :
Comme il s'agit d'une jointure à gauche, elle inclut les travaux qui n'ont pas d'étapes (voir le NULL
dans le step_id
et step_name
colonnes pour le travail appelé TestJob
).
Pour le limiter uniquement aux tâches comportant des étapes, utilisez une jointure interne.