I den här artikeln presenterar jag fyra alternativ för att använda T-SQL för att returnera de scheman som är kopplade till ett SQL Server Agent-jobb.
Alternativen
Du kan använda följande T-SQL-alternativ för att returnera scheman för ett SQL Server Agent-jobb:
- Alternativ 1 :Kör
sp_help_job
lagrad procedur. - Alternativ 2 :Kör
sp_help_schedule
lagrad procedur. - Alternativ 3 :Kör
sp_help_jobschedule
lagrad procedur. - Alternativ 4 :Fråga
sysschedules
tabell (och sammanfoga den medsysjobschedules
ochsysjobs_view
).
Alla dessa alternativ finns i msdb databasen och måste därför köras i den databasen. Du kan göra det genom att byta till msdb databas först, eller genom att kvalificera objektet på lämpligt sätt (t.ex. msdb.dbo.sysschedules
).
Alternativ 1:sp_help_job
Lagrad procedur
När du ringer sp_help_job
utan några argument returnerar den helt enkelt en lista med jobb. Men när du skickar ett jobbs namn eller ID listar det detaljerna för jobbet, inklusive dess scheman.
Här är ett exempel:
USE msdb;
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Resultat:
Detta listar jobbet, såväl som alla jobbsteg, scheman och målservrar. I det här fallet finns det två scheman kopplade till jobbet.
Här är ett exempel på koden när du använder ID:t:
EXEC sp_help_job
@job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
När du använder ID:t kan du utelämna parameternamnet om du vill.
Exempel:
EXEC sp_help_job '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
Syntax
Den fullständiga syntaxen för sp_help_job
går så här:
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 för sp_help_job
för en förklaring av varje parameter, såväl som de värden som var och en accepterar.
Alternativ 2:sp_help_schedule
Lagrad procedur
sp_help_schedule
lagrad procedur är utformad specifikt för att returnera scheman.
Om du kör det utan att skicka några argument kommer det att returnera alla scheman i instansen:
EXEC sp_help_schedule;
För att få information om ett specifikt schema, skicka antingen schemats namn eller dess ID:
EXEC sp_help_schedule
@schedule_name = 'Run_Sat_6AM';
Även om sp_help_schedule
returnerar inte scheman för ett specifikt jobb, du kan använda det för att endast returnera de scheman som är kopplade till ett jobb.
@attached_schedules_only
parametern är bit , med standardvärdet 0
, vilket innebär att det returnerar både bifogade och obundna scheman. Skickar värdet 1
begränsar det till bara bifogade scheman.
Exempel:
EXEC sp_help_schedule
@attached_schedules_only = 1;
En annan sak du kan göra är att använda @include_description
parameter för att ange om schemats beskrivning ska inkluderas i resultatuppsättningen eller inte.
Se Använda sp_help_schedule
i SQL Server för mer information och exempel.
Alternativ 3:sp_help_jobschedule
Lagrad procedur
sp_help_jobschedule
lagrad procedur returnerar information om schemaläggning av jobb.
Exempel:
EXEC sp_help_jobschedule
@job_name = 'SqlAgentTest';
Detta returnerar en lista över scheman som är kopplade till det angivna jobbet.
Du kan också skicka ett schemas ID eller namn för att returnera just det schemat.
När du ringer sp_help_jobschedule
måste du ange antingen jobbnamnet eller dess ID (men inte båda), eller schema-ID. Du kan också skicka schedule_name
men endast i kombination med jobb-ID eller dess namn.
Den accepterade kombinationen av argument är lite knepig. Se Använda sp_help_jobschedule
i SQL Server för en mer detaljerad förklaring och fler exempel.
Alternativ 4:sysschedules
tabell (och andra)
Du kan fråga sysschedules
tabell och sammanfoga den med tabeller som sysjobschedules
och sysjobs_view
för att returnera en lista över jobb och deras tillhörande scheman.
Exempel:
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 det här fallet använde jag innerkopplingar för att endast returnera scheman som har ett associerat jobb och vice versa.
Du kan byta till högerkopplingar för att returnera alla scheman, oavsett om de är kopplade till ett jobb, eller vänsterkopplingar för att returnera alla jobb, oavsett om de har ett bifogat schema. Eller så kan du använda fullständiga kopplingar för att helt enkelt returnera allt.