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

3 måder at få jobtrinene for et SQL Server Agent Job (T-SQL)

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

Indstillingerne

Du kan bruge følgende T-SQL-indstillinger til at returnere trinene for et SQL Server Agent-job:

  • Mulighed 1 :Udfør sp_help_job gemt procedure.
  • Mulighed 2 :Udfør sp_help_jobstep gemt procedure.
  • Mulighed 3 :Forespørg sysjobsteps tabel (og tilslut den med sysjobs_view hvis nødvendigt).

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

Mulighed 1:sp_help_job

Når du ringer til sp_help_job uden nogen argumenter returnerer den blot en liste over job. Men når du videregiver navnet eller ID'et på et job, viser det detaljerne for det pågældende job, inklusive dets trin.

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:sp_help_jobstep

sp_help_jobstep lagret procedure er designet specifikt til at returnere trinene i et job. Men det er alt, hvad det returnerer.

Så hvis du ikke ønsker at se noget af tidsplanen og målserverting osv., kan det være dette, du leder efter.

Du kan bestå sp_help_jobstep jobnavnet eller dets ID (men ikke begge).

Her er et eksempel:

EXEC sp_help_jobstep
	@job_name = 'SqlAgentTest';

Og her er, hvordan resultatet ser ud på et to-trins job:

Du kan også angive et trin-id, hvis du kun ønsker, at et specifikt trin skal returneres. Du skal dog stadig angive, hvilket job det er til (enten med dets ID eller navn).

Her er et eksempel på angivelse af det andet trin i jobbet:

EXEC sp_help_jobstep
	@job_name = 'SqlAgentTest', 
	@step_id = 2;

Trin-id'et skal faktisk eksistere for det job. For eksempel ved at angive et trin-id på 3 for ovenstående job resulterer i en fejl.

Mulighed 3:sysjobsteps Tabel

En anden mulighed er at køre en forespørgsel mod sysjobsteps bord.

Denne tabel indeholder trinene for alle opgaver, så hvis du kun vil have trinene til et bestemt job, skal du videregive job-id'et.

Her er et eksempel på forespørgsel efter sysjobsteps tabel for trinene for et bestemt job:

SELECT * FROM msdb.dbo.sysjobsteps
WHERE job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';

Dette returnerer et resultat svarende til sp_help_jobstep procedure.

Hvis du ønsker, at nogle af joboplysningerne skal returneres (såsom navnet), kan du køre en joinforbindelse mellem sysjobsteps og sysjobs_view .

Eksempel:

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.


  1. Sådan finder du forskellen mellem to datoer i MySQL

  2. Oracle SQL - REGEXP_LIKE indeholder andre tegn end a-z eller A-Z

  3. Eksisterer / findes ikke:'vælg 1' vs 'vælg felt'

  4. Omkostningerne ved gratis PostgreSQL-reklame