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.