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

4 façons d'obtenir une liste des planifications dans SQL Server Agent (T-SQL)

Dans cet article, je présente quatre options d'utilisation de T-SQL pour renvoyer les planifications associées à un travail de l'Agent SQL Server.

Les Options

Vous pouvez utiliser les options T-SQL suivantes pour renvoyer les planifications d'un travail de l'Agent SQL Server :

  • Option 1 :Exécute le sp_help_job procédure stockée.
  • Option 2 :Exécute le sp_help_schedule procédure stockée.
  • Option 3 :Exécute le sp_help_jobschedule procédure stockée.
  • Option 4  :Interroger les sysschedules table (et joignez-la à sysjobschedules et sysjobs_view ).

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

Option 1 :Le sp_help_job Procédure stockée

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

Voici un exemple :

USE msdb;
EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Résultat :

Cela répertorie le travail, ainsi que toutes les étapes du travail, les planifications et les serveurs cibles. Dans ce cas, il y a deux horaires attachés au travail.

Voici un exemple de code lors de l'utilisation de l'ID :

EXEC sp_help_job 
	@job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';

Lorsque vous utilisez l'ID, vous pouvez omettre le nom du paramètre si vous le souhaitez.

Exemple :

EXEC sp_help_job '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';

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 :Le sp_help_schedule Procédure stockée

Le sp_help_schedule procédure stockée est conçue spécifiquement pour renvoyer des horaires.

Si vous l'exécutez sans passer d'arguments, il renverra tous les plannings de l'instance :

EXEC sp_help_schedule;

Pour obtenir des informations sur un horaire spécifique, transmettez soit le nom de l'horaire, soit son ID :

EXEC sp_help_schedule
	@schedule_name = 'Run_Sat_6AM';

Bien que sp_help_schedule ne renvoie pas les horaires d'une tâche spécifique, vous pouvez l'utiliser pour renvoyer uniquement les horaires associés à une tâche.

Le @attached_schedules_only le paramètre est bit , avec une valeur par défaut de 0 , ce qui signifie qu'il renvoie à la fois les plannings attachés et non attachés. Passer une valeur de 1 le limite uniquement aux horaires joints.

Exemple :

EXEC sp_help_schedule
	@attached_schedules_only = 1;

Une autre chose que vous pouvez faire est d'utiliser le @include_description paramètre pour spécifier s'il faut ou non inclure la description de la planification dans le jeu de résultats.

Voir Utilisation de sp_help_schedule dans SQL Server pour plus d'informations et d'exemples.

Option 3 :Le sp_help_jobschedule Procédure stockée

Le sp_help_jobschedule procédure stockée renvoie des informations sur la planification des travaux.

Exemple :

EXEC sp_help_jobschedule
	@job_name = 'SqlAgentTest';

Cela renvoie une liste des planifications qui sont attachées au travail spécifié.

Vous pouvez également transmettre l'ID ou le nom d'un programme pour renvoyer uniquement ce programme.

Lorsque vous appelez sp_help_jobschedule , vous devez fournir soit le nom du travail, soit son ID (mais pas les deux), soit l'ID de planification. Vous pouvez également passer le schedule_name mais uniquement en combinaison avec l'ID de la tâche ou son nom.

La combinaison d'arguments acceptée est un peu délicate. Voir Utilisation de sp_help_jobschedule dans SQL Server pour une explication plus détaillée et plus d'exemples.

Option 4 :les sysschedules tableau (et autres)

Vous pouvez interroger les sysschedules table et joignez-la à des tables telles que sysjobschedules et sysjobs_view pour renvoyer une liste de travaux et leurs horaires associés.

Exemple :

SELECT
	jv.name,
	jv.description,
	s.schedule_id,
	s.name,
	s.freq_type,
	s.freq_interval,
	s.freq_subday_type,
	s.freq_subday_interval,
	js.next_run_date,
	js.next_run_time
FROM msdb.dbo.sysjobs_view jv
INNER JOIN msdb.dbo.sysjobschedules js
ON jv.job_id = js.job_id
INNER JOIN msdb.dbo.sysschedules s
ON s.schedule_id = js.schedule_id
ORDER BY jv.name, s.name;

Résultat :

Dans ce cas, j'ai utilisé des jointures internes pour renvoyer uniquement les horaires qui ont un travail associé et vice-versa.

Vous pouvez passer à des jointures droites pour renvoyer toutes les planifications, qu'elles soient attachées ou non à une tâche, ou à des jointures gauches pour renvoyer toutes les tâches, qu'elles aient ou non une planification jointe. Ou vous pouvez utiliser des jointures complètes pour simplement tout renvoyer.