В тази статия представям три опции за връщане на стъпките на задача на агент на SQL Server, когато използвате T-SQL.
Опциите
Можете да използвате следните опции на T-SQL, за да върнете стъпките на задача на агент на SQL Server:
- Опция 1 :Изпълнете
sp_help_job
съхранена процедура. - Вариант 2 :Изпълнете
sp_help_jobstep
съхранена процедура. - Опция 3 :Запитване за
sysjobsteps
таблица (и я присъединете сsysjobs_view
ако е необходимо).
Всички тези опции се намират в msdb база данни и следователно трябва да се изпълнява в тази база данни. Можете да направите това, като преминете към msdb база данни първо или чрез подходящо квалифициране на обекта (напр. msdb.dbo.sysjobsteps
).
Опция 1:sp_help_job
Когато извикате sp_help_job
без никакви аргументи, той просто връща списък с работни места. Но когато подадете името или идентификатора на задание, той изброява подробностите за това задание, включително стъпките му.
Ето един пример:
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Резултат:
Това изброява заданието, както и всички стъпки, графици и целеви сървъри.
Ето пример за кода при използване на идентификатора:
EXEC sp_help_job
@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';
Когато използвате идентификатора, можете да пропуснете името на параметъра, ако желаете.
Пример:
EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';
Синтаксис
Пълният синтаксис на sp_help_job
става така:
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' ]
Вижте документацията на Microsoft за sp_help_job
за обяснение на всеки параметър, както и стойностите, които всеки приема.
Опция 2:sp_help_jobstep
sp_help_jobstep
Съхранената процедура е проектирана специално за връщане на стъпките на задание. Но това е всичко, което се връща.
Така че, ако не искате да виждате нещо от графика и целевия сървър и т.н., това може да е това, което търсите.
Можете да предадете sp_help_jobstep
името на заданието или неговия идентификатор (но не и двете).
Ето един пример:
EXEC sp_help_jobstep
@job_name = 'SqlAgentTest';
И ето как изглежда резултатът при работа в две стъпки:
Можете също да посочите идентификатор на стъпка, ако искате да бъде върната само конкретна стъпка. Все пак трябва да посочите за коя работа е (или с неговия идентификационен номер, или с име).
Ето пример за определяне на втората стъпка в заданието:
EXEC sp_help_jobstep
@job_name = 'SqlAgentTest',
@step_id = 2;
Идентификационният номер на стъпката трябва действително да съществува за тази работа. Например, посочване на идентификатор на стъпка от 3
за горното задание води до грешка.
Опция 3:sysjobsteps
Таблица
Друга възможност е да изпълните заявка срещу sysjobsteps
маса.
Тази таблица съдържа стъпките на всички задания, така че ако искате стъпките само за конкретна работа, ще трябва да подадете идентификатора на заданието.
Ето пример за запитване на sysjobsteps
таблица за стъпките на конкретна работа:
SELECT * FROM msdb.dbo.sysjobsteps
WHERE job_id = '8A6E1BFF-9F46-4FF9-8E63-ABC8B224B6F8';
Това връща подобен резултат към sp_help_jobstep
процедура.
Ако искате някои от детайлите на заданието да бъдат върнати (като името му), можете да изпълните обединяване между sysjobsteps
и sysjobs_view
.
Пример:
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;
Ето резултата в моята тестова среда:
Тъй като това е ляво присъединяване, то включва задачи, които нямат стъпки (вижте NULL
в step_id
и step_name
колони за заданието, наречено TestJob
).
За да го ограничите само до тези задачи със стъпки, използвайте вътрешно присъединяване.