I denne artikel præsenterer jeg fire muligheder for at bruge T-SQL til at returnere de tidsplaner, der er knyttet til et SQL Server Agent-job.
Indstillingerne
Du kan bruge følgende T-SQL-indstillinger til at returnere tidsplanerne for et SQL Server Agent-job:
- Mulighed 1 :Udfør
sp_help_job
gemt procedure. - Mulighed 2 :Udfør
sp_help_schedule
gemt procedure. - Mulighed 3 :Udfør
sp_help_jobschedule
gemt procedure. - Mulighed 4 :Forespørg
sysschedules
tabel (og sammenføj den medsysjobschedules
ogsysjobs_view
).
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.sysschedules
).
Mulighed 1:sp_help_job
Lagret procedure
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 tidsplaner.
Her er et eksempel:
USE msdb;
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Resultat:
Dette viser jobbet samt alle jobtrin, tidsplaner og målservere. I dette tilfælde er der to tidsplaner knyttet til jobbet.
Her er et eksempel på koden, når du bruger ID'et:
EXEC sp_help_job
@job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
Når du bruger ID'et, kan du udelade parameternavnet, hvis du ønsker det.
Eksempel:
EXEC sp_help_job '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
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_schedule
Lagret procedure
sp_help_schedule
lagret procedure er designet specifikt til at returnere tidsplaner.
Hvis du udfører det uden at sende nogen argumenter, vil det returnere alle tidsplaner i instansen:
EXEC sp_help_schedule;
For at få oplysninger om en bestemt tidsplan skal du sende enten tidsplanens navn eller dens ID:
EXEC sp_help_schedule
@schedule_name = 'Run_Sat_6AM';
Selvom sp_help_schedule
returnerer ikke tidsplaner for et bestemt job, kan du bruge det til kun at returnere de tidsplaner, der er knyttet til et job.
@attached_schedules_only
parameter er bit , med en standard på 0
, hvilket betyder, at den returnerer både vedhæftede og ikke-tilknyttede tidsplaner. Sender værdien 1
begrænser det til kun vedhæftede tidsplaner.
Eksempel:
EXEC sp_help_schedule
@attached_schedules_only = 1;
En anden ting du kan gøre er at bruge @include_description
parameter for at angive, om tidsplanens beskrivelse skal inkluderes i resultatsættet.
Se Brug af sp_help_schedule
i SQL Server for mere information og eksempler.
Mulighed 3:sp_help_jobschedule
Lagret procedure
sp_help_jobschedule
lagret procedure returnerer information om planlægning af job.
Eksempel:
EXEC sp_help_jobschedule
@job_name = 'SqlAgentTest';
Dette returnerer en liste over tidsplaner, der er knyttet til det angivne job.
Du kan også sende en tidsplans ID eller navn for at returnere netop den tidsplan.
Når du ringer til sp_help_jobschedule
, skal du angive enten jobnavnet eller dets id (men ikke begge dele) eller tidsplan-id'et. Du kan også videregive schedule_name
men kun i kombination med job-id'et eller dets navn.
Den accepterede kombination af argumenter er lidt tricky. Se Brug af sp_help_jobschedule
i SQL Server for en mere detaljeret forklaring og flere eksempler.
Mulighed 4:sysschedules
tabel (og andre)
Du kan forespørge på sysschedules
tabel og sammenføj den med tabeller såsom sysjobschedules
og sysjobs_view
for at returnere en liste over job og deres tilknyttede tidsplaner.
Eksempel:
SELECT
jv.name,
jv.description,
s.schedule_id,
s.name,
s.freq_type,
s.freq_interval,
s.freq_subday_type,
s.freq_subday_interval,
js.next_run_date,
js.next_run_time
FROM msdb.dbo.sysjobs_view jv
INNER JOIN msdb.dbo.sysjobschedules js
ON jv.job_id = js.job_id
INNER JOIN msdb.dbo.sysschedules s
ON s.schedule_id = js.schedule_id
ORDER BY jv.name, s.name;
Resultat:
I dette tilfælde brugte jeg indre sammenføjninger til kun at returnere tidsplaner, der har et tilknyttet job og omvendt.
Du kan skifte til højresammenføjninger for at returnere alle tidsplaner, uanset om de er knyttet til et job, eller venstresammenføjninger for at returnere alle job, uanset om de har en tilknyttet tidsplan. Eller du kan bruge fulde joinforbindelser til simpelthen at returnere alt.