sql >> Database >  >> RDS >> Sqlserver

3 manieren om een ​​lijst met SQL Server Agent-taken (T-SQL) te retourneren

Vaak is de snelste manier om een ​​lijst met SQL Server Agent-taken te krijgen, eenvoudigweg het SQL Server Agent-knooppunt in de SSMS Object Explorer uit te breiden.

Maar dat is niet de enige manier. En afhankelijk van uw omgeving is het misschien niet eens een optie. Als u geen SSMS of een databasetool hebt waarmee u de SQL Server Agent-taken kunt zien, moet u in plaats daarvan mogelijk T-SQL gebruiken.

In dit artikel presenteer ik drie opties voor het retourneren van een lijst met SQL Server Agent-taken bij gebruik van T-SQL.

De opties

U kunt de volgende opties gebruiken om een ​​lijst met SQL Server Agent-taken met T-SQL te retourneren:

  • Optie 1 :Voer de sp_help_job uit opgeslagen procedure.
  • Optie 2 :Vraag de sysjobs_view bekijken.
  • Optie 3 :Query de sysjobs tafel direct.

Al deze opties bevinden zich in de msdb database, en moeten daarom in die database worden uitgevoerd. U kunt dat doen door over te schakelen naar de msdb database eerst, of door het object op de juiste manier te kwalificeren (bijv. msdb.dbo.sysjobs_view ).

Optie 1:sp_help_job

Bij gebruik van sp_help_job om een ​​lijst met SQL Server Agent-taken terug te sturen, voert u deze eenvoudig uit zonder enige argumenten.

Zoals dit:

USE msdb;
EXEC sp_help_job;

In dit geval schakelde ik over naar de msdb database eerst, wat betekende dat ik de procedure niet volledig hoefde te kwalificeren met de databasenaam en het schema.

Zo ziet dat eruit als ik SSMS gebruik om het uit te voeren in mijn testomgeving:

Een specifieke taak retourneren

U kunt dezelfde opgeslagen procedure gebruiken om de details van een van die taken te retourneren. Als je dat doet, krijg je veel meer details dan wanneer je alle vacatures opsomt.

Om de taakdetails te krijgen, moet u de taaknaam of ID opgeven.

Hier is een voorbeeld:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Resultaat:

Dit geeft een overzicht van de taak, evenals alle taakstappen, schema's en doelservers.

Hier is een voorbeeld van de code bij gebruik van de ID:

EXEC sp_help_job 
	@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';

Als u de ID gebruikt, kunt u desgewenst de parameternaam weglaten.

Voorbeeld:

EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';

Syntaxis

De volledige syntaxis van sp_help_job gaat als volgt:

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' ]

Zie de documentatie van Microsoft voor sp_help_job voor een uitleg van elke parameter, evenals de waarden die elke parameter accepteert.

Optie 2:De sysjobs_view Bekijk

U kunt de sysjobs_view . gebruiken om een ​​lijst met SQL Server Agent-taken te retourneren.

Voorbeeld:

SELECT * FROM msdb.dbo.sysjobs_view;

In dit geval heb ik de weergavenaam gekwalificeerd met de database en het schema.

Deze weergave retourneert een vergelijkbare (maar iets andere) resultaatset voor de sp_help_job opgeslagen procedure bij gebruik zonder argumenten.

Als u taakdetails zoals stappen, schema's, enz. wilt, moet u deze samenvoegen met andere tabellen, zoals sysjobsteps , sysjobschedules , sysjobactivity , sysjobhistory , enz.

Hier is een voorbeeld van het samenvoegen met de sysjobsteps tafel:

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;

Dit is het resultaat in mijn testomgeving:

Aangezien dit een left join is, bevat het jobs die geen stappen hebben (zie de NULL in de step_id en step_name kolommen voor de taak genaamd TestJob ).

Gebruik een inner join om het te beperken tot alleen die taken met stappen.

Optie 3:De sysjobs Tabel

Hier is een voorbeeld van rechtstreeks naar de sysjobs gaan tafel:

SELECT * FROM msdb.dbo.sysjobs;

Net als bij de weergave, moet u, als u taakdetails zoals stappen, schema's enz. wilt, deze samenvoegen met andere tabellen, zoals sysjobsteps , sysjobschedules , sysjobactivity , sysjobhistory , enz.

Het wordt meestal aanbevolen om rechtstreeks naar de weergave te zoeken in plaats van naar de tabel.


  1. Gehumaniseerde of natuurlijke nummersortering van gemengde woord-en-nummerreeksen

  2. Hoe een enorme tabelgegevens naar een andere tabel in SQL Server te kopiëren?

  3. De beste SQL Server-prestatieforums voor hulp bij de moeilijkste vragen

  4. Wat is de standaardnaam van de beperking in SQL Server?