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

3 façons de renvoyer une liste des tâches de l'Agent SQL Server (T-SQL)

Souvent, le moyen le plus rapide d'obtenir une liste des travaux de l'Agent SQL Server consiste simplement à développer le nœud de l'Agent SQL Server dans l'Explorateur d'objets SSMS.

Mais ce n'est pas le seul moyen. Et selon votre environnement, ce n'est peut-être même pas une option. Si vous ne disposez pas de SSMS ou d'un outil de base de données qui vous permet de voir les travaux de l'Agent SQL Server, vous devrez peut-être utiliser T-SQL à la place.

Dans cet article, je présente trois options pour renvoyer une liste des travaux de l'Agent SQL Server lors de l'utilisation de T-SQL.

Les options

Vous pouvez utiliser les options suivantes pour renvoyer une liste des travaux de l'Agent SQL Server avec T-SQL :

  • Option 1 :Exécute le sp_help_job procédure stockée.
  • Option 2  :Interroger la sysjobs_view vue.
  • Option 3 :Interroger les sysjobs tableau directement.

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

Option 1 :sp_help_job

Lors de l'utilisation de sp_help_job pour renvoyer une liste des travaux de l'Agent SQL Server, exécutez-le simplement sans aucun argument.

Comme ceci :

USE msdb;
EXEC sp_help_job;

Dans ce cas, je suis passé au msdb base de données en premier, ce qui signifiait que je n'avais pas besoin de qualifier complètement la procédure avec le nom et le schéma de la base de données.

Voici à quoi cela ressemble lorsque j'utilise SSMS pour l'exécuter dans mon environnement de test :

Renvoyer une tâche spécifique

Vous pouvez utiliser la même procédure stockée pour renvoyer les détails de l'une de ces tâches. Lorsque vous faites cela, vous obtenez beaucoup plus de détails que lorsque vous répertoriez tous les emplois.

Pour obtenir les détails de la tâche, vous devez fournir le nom ou l'ID de la tâche.

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 :La sysjobs_view Afficher

Vous pouvez utiliser le sysjobs_view pour renvoyer une liste des travaux de l'Agent SQL Server.

Exemple :

SELECT * FROM msdb.dbo.sysjobs_view;

Dans ce cas, j'ai qualifié le nom de la vue avec la base de données et le schéma.

Cette vue renvoie un jeu de résultats similaire (mais légèrement différent) au sp_help_job procédure stockée lorsqu'elle est utilisée sans aucun argument.

Si vous voulez des détails sur le travail tels que les étapes, les horaires, etc., vous devrez le joindre à d'autres tables, telles que sysjobsteps , sysjobschedules , sysjobactivity , sysjobhistory , etc.

Voici un exemple de jointure avec les sysjobsteps tableau :

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.

Option 3 :Les sysjobs Tableau

Voici un exemple d'accès direct aux sysjobs tableau :

SELECT * FROM msdb.dbo.sysjobs;

Comme pour la vue, si vous voulez des détails sur le travail tels que les étapes, les horaires, etc., vous devrez le joindre à d'autres tables, telles que sysjobsteps , sysjobschedules , sysjobactivity , sysjobhistory , etc.

Il est généralement recommandé d'interroger la vue plutôt que la table directement.