Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

3 façons d'obtenir les étapes de travail d'un travail de l'Agent SQL Server (T-SQL)

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 avec sysjobs_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.