В предишна статия за създаване на задание на SQL Server Agent с T-SQL демонстрирах как да създадете задание с една стъпка.
В тази статия ще ви покажа как да създадете работа с няколко стъпки.
Пример
Когато създавате задание на SQL Server Agent с T-SQL, трябва да използвате няколко съхранени процедури. Това е така, защото всяка част се третира независимо от останалите. Например sp_add_job
процедурата създава заданието, а sp_add_jobstep
процедурата създава стъпка в това задание.
Когато създавате задание, което има повече от една стъпка, трябва да извикате sp_add_jobstep
няколко пъти, като всяко повикване определя различна стъпка.
Освен това, ако искате заданието да преминава през стъпките (и да не излизате от него след първата стъпка), ще трябва да посочите това, когато извикате процедурата.
Ето един пример, който прави всичко това.
USE msdb;
GO
EXEC sp_add_job
@job_name = N'SqlAgentTest',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
GO
EXEC sp_add_jobstep
@job_name = N'SqlAgentTest',
@step_name = N'Insert data for step 1',
@subsystem = N'TSQL',
@command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 1, SYSDATETIME())',
@on_success_action = 3;
GO
EXEC sp_add_jobstep
@job_name = N'SqlAgentTest',
@step_name = N'Insert data for step 2',
@subsystem = N'TSQL',
@command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 2, SYSDATETIME())',
@on_success_action = 1;
GO
EXEC sp_add_schedule
@schedule_name = N'Run_Sat_6AM',
@freq_type = 8,
@freq_interval = 64,
@freq_recurrence_factor = 1,
@active_start_time = 060000;
GO
EXEC sp_attach_schedule
@job_name = N'SqlAgentTest',
@schedule_name = N'Run_Sat_6AM';
GO
EXEC sp_add_jobserver
@job_name = N'SqlAgentTest',
@server_name = N'(LOCAL)';
GO
Този код създава задание с две работни стъпки. Той също така създава нов график, прикачва това задание към графика, след което го насочва към локалния сървър.
Частта, която създава стъпките на заданието, е следната:
EXEC sp_add_jobstep
@job_name = N'SqlAgentTest',
@step_name = N'Insert data for step 1',
@subsystem = N'TSQL',
@command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 1, SYSDATETIME())',
@on_success_action = 3;
GO
EXEC sp_add_jobstep
@job_name = N'SqlAgentTest',
@step_name = N'Insert data for step 2',
@subsystem = N'TSQL',
@command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 2, SYSDATETIME())',
@on_success_action = 1;
GO
При първото извикване частта, която отива @on_success_action = 3
е това, което кара работата да продължи към следващата стъпка.
Стойността по подразбиране е 1
, което означава, че заданието ще се прекрати след завършване на първата стъпка (което посочихме във втората стъпка). Така че, ако не бяхме включили @on_success_action = 3
като част в първата стъпка, работата ще бъде напусната, без да се премине към следващата стъпка.
Можете също да посочите @on_fail_action
, което указва какво ще се случи, ако тази стъпка не успее.
Стойностите, които можете да предоставите на @on_success_action
и @on_fail_action
са както следва:
1 | Откажете се с успех. Това е по подразбиране за @on_success_action . |
2 | Изход с неуспех. Това е по подразбиране за @on_fail_action . |
3 | Отидете към следващата стъпка. |
4 | Отидете на стъпка (ID). Тук предоставяте идентификационния номер на стъпка, към която искате да продължи работата. |
Вижте стъпките на заданието
Можете да използвате sp_help_job
за да получите информация за заданията на SQL Server Agent в системата.
Можете да го използвате със или без параметри, но за да получите подробности за стъпката на заданието, трябва да предоставите името или идентификатора на заданието.
Можем да го използваме, за да видим и двете стъпки на заданието, които сме създали за заданието.
Като това:
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Ето как изглежда резултатът при изпълнението му в SSMS:
Ето пример за кода при използване на идентификатора:
EXEC sp_help_job
@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';
Когато използвате идентификатора, можете да пропуснете името на параметъра, ако желаете.
Пример:
EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';
Можете също да използвате sp_help_jobstep
по същия начин да върнете само стъпките на заданието (без цялата друга информация за заданието). Това приема името или идентификатора на заданието, както и незадължително име на стъпка или идентификатор.
Пълен синтаксис
Пълният синтаксис на sp_add_jobstep
става така:
sp_add_jobstep [ @job_id = ] job_id | [ @job_name = ] 'job_name'
[ , [ @step_id = ] step_id ]
{ , [ @step_name = ] 'step_name' }
[ , [ @subsystem = ] 'subsystem' ]
[ , [ @command = ] 'command' ]
[ , [ @additional_parameters = ] 'parameters' ]
[ , [ @cmdexec_success_code = ] code ]
[ , [ @on_success_action = ] success_action ]
[ , [ @on_success_step_id = ] success_step_id ]
[ , [ @on_fail_action = ] fail_action ]
[ , [ @on_fail_step_id = ] fail_step_id ]
[ , [ @server = ] 'server' ]
[ , [ @database_name = ] 'database' ]
[ , [ @database_user_name = ] 'user' ]
[ , [ @retry_attempts = ] retry_attempts ]
[ , [ @retry_interval = ] retry_interval ]
[ , [ @os_run_priority = ] run_priority ]
[ , [ @output_file_name = ] 'file_name' ]
[ , [ @flags = ] flags ]
[ , { [ @proxy_id = ] proxy_id
| [ @proxy_name = ] 'proxy_name' } ]
Вижте документацията на Microsoft за sp_add_jobstep
за обяснение на всеки параметър, както и стойностите, които всеки приема.