sql >> Database teknologi >  >> RDS >> Sqlserver

3 måder at returnere en liste over SQL Server Agent-job (T-SQL)

Ofte er den hurtigste måde at få en liste over SQL Server Agent-job på blot at udvide SQL Server Agent-noden i SSMS Object Explorer.

Men det er ikke den eneste måde. Og afhængigt af dit miljø er det måske ikke engang en mulighed. Hvis du ikke har SSMS eller et databaseværktøj, der giver dig mulighed for at se SQL Server Agent-jobbene, skal du muligvis bruge T-SQL i stedet for.

I denne artikel præsenterer jeg tre muligheder for at returnere en liste over SQL Server Agent-job, når du bruger T-SQL.

Indstillingerne

Du kan bruge følgende muligheder til at returnere en liste over SQL Server Agent-job med T-SQL:

  • Mulighed 1 :Udfør sp_help_job gemt procedure.
  • Mulighed 2 :Forespørg på sysjobs_view se.
  • Mulighed 3 :Forespørg på sysjobs bord direkte.

Alle disse muligheder findes i msdb database, og skal derfor køres i denne database. Du kan gøre det ved at skifte til msdb database først, eller ved at kvalificere objektet korrekt (f.eks. msdb.dbo.sysjobs_view ).

Mulighed 1:sp_help_job

Når du bruger sp_help_job for at returnere en liste over SQL Server Agent-job, skal du blot udføre den uden nogen argumenter.

Sådan:

USE msdb;
EXEC sp_help_job;

I dette tilfælde skiftede jeg til msdb database først, hvilket betød, at jeg ikke behøvede fuldt ud at kvalificere proceduren med databasenavnet og skemaet.

Sådan ser det ud, når jeg bruger SSMS til at udføre det i mit testmiljø:

Returnering af et bestemt job

Du kan bruge den samme lagrede procedure til at returnere detaljerne for et hvilket som helst af disse job. Når du gør det, får du mange flere detaljer, end du får, når du oplister alle jobs.

For at få joboplysningerne skal du angive jobnavnet eller ID.

Her er et eksempel:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Resultat:

Dette viser jobbet, såvel som alle jobtrin, tidsplaner og målservere.

Her er et eksempel på koden, når du bruger ID'et:

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

Når du bruger ID'et, kan du udelade parameternavnet, hvis du ønsker det.

Eksempel:

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

Syntaks

Den fulde syntaks for sp_help_job går sådan her:

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

Se Microsofts dokumentation for sp_help_job for en forklaring af hver parameter, samt de værdier, som hver accepterer.

Mulighed 2:sysjobs_view Vis

Du kan bruge sysjobs_view for at returnere en liste over SQL Server Agent-job.

Eksempel:

SELECT * FROM msdb.dbo.sysjobs_view;

I dette tilfælde kvalificerede jeg visningsnavnet med databasen og skemaet.

Denne visning returnerer et lignende (men lidt anderledes) resultatsæt til sp_help_job lagret procedure, når den bruges uden nogen argumenter.

Hvis du vil have jobdetaljer såsom trin, tidsplaner osv., skal du forbinde det med andre tabeller, såsom sysjobsteps , sysjobschedules , sysjobactivity , sysjobhistory osv.

Her er et eksempel på at forbinde det med sysjobsteps tabel:

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;

Her er resultatet i mit testmiljø:

Da dette er en venstre joinforbindelse, inkluderer det job, der ikke har nogen trin (se NULL i step_id og step_name kolonner for jobbet kaldet TestJob ).

For at begrænse det til kun de job med trin, skal du bruge en indre joinforbindelse.

Mulighed 3:sysjobs Tabel

Her er et eksempel på at gå direkte til sysjobs tabel:

SELECT * FROM msdb.dbo.sysjobs;

Som med visningen, hvis du vil have jobdetaljer såsom trin, tidsplaner osv., skal du forbinde det med andre tabeller, såsom sysjobsteps , sysjobschedules , sysjobactivity , sysjobhistory osv.

Det anbefales normalt at forespørge visningen i stedet for tabellen direkte.


  1. Inaktiv session i Oracle af JDBC

  2. Begræns en SQL Server-forbindelse til en specifik IP-adresse

  3. Hvornår eller hvorfor skal man bruge en SET DEFINE OFF i Oracle Database

  4. Adgang nægtet for bruger 'root'@'localhost' (ved hjælp af adgangskode:JA) - Ingen privilegier?