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