В SQL Server можете да използвате sp_update_jobstep
съхранена процедура за промяна на съществуваща стъпка на задание на задача на агент на SQL Server.
Когато създавате задание на SQL Server Agent, създавате една или повече стъпки на заданието за това задание. sp_update_jobstep
процедурата ви позволява да актуализирате конкретна стъпка на заданието, независимо от действителното задание или всякакви други стъпки на заданието.
Пример
В този пример създаваме задание с една стъпка от заданието, след което използваме sp_update_jobstep
за да промените стъпката на заданието.
Създайте работата
Първо, създайте заданието:
USE msdb;
GO
EXEC sp_add_job
@job_name = N'BackupMoviesDB',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
GO
EXEC sp_add_jobstep
@job_name = N'BackupMoviesDB',
@step_name = N'Run the backup',
@subsystem = N'TSQL',
@command = N'BACKUP DATABASE [Movies] TO DISK = N''C:\Backups\Movies.bak'' WITH CHECKSUM',
@retry_attempts = 5,
@retry_interval = 5;
GO
EXEC sp_add_schedule
@schedule_name = N'Run_Sat_5AM',
@freq_type = 8,
@freq_interval = 64,
@freq_recurrence_factor = 1,
@active_start_time = 050000;
GO
EXEC sp_attach_schedule
@job_name = N'BackupMoviesDB',
@schedule_name = N'Run_Sat_5AM';
GO
EXEC sp_add_jobserver
@job_name = N'BackupMoviesDB';
GO
Горният код използва пет съхранени процедури, но sp_add_jobstep
процедурата е единствената, която съдържа подробностите, които могат да се променят с sp_update_jobstep
. Другите процедури имат свои собствени съвпадащи процедури за „актуализация“ (като sp_update_job
и sp_update_schedule
).
Така че само за да е ясно, следващата част е частта, която можем да актуализираме с sp_update_jobstep
процедура.
EXEC sp_add_jobstep
@job_name = N'BackupMoviesDB',
@step_name = N'Run the backup',
@subsystem = N'TSQL',
@command = N'BACKUP DATABASE [Movies] TO DISK = N''C:\Backups\Movies.bak'' WITH CHECKSUM',
@retry_attempts = 5,
@retry_interval = 5;
В този случай предоставихме шест аргумента при създаването на заданието. Процедурата всъщност приема много повече от това, но това ще свърши работа за нашите цели.
Актуализирайте стъпката на заданието
Вече можем да използваме sp_update_jobstep
за да промените горната стъпка на заданието.
EXEC sp_update_jobstep
@job_name = N'BackupMoviesDB',
@step_id = 1,
@step_name = N'Run the backup',
@subsystem = N'TSQL',
@command = N'BACKUP DATABASE [Movies] TO DISK = N''C:\Backups\Movies.bak'' WITH CHECKSUM',
@retry_attempts = 10,
@retry_interval = 5;
Единственото нещо, което този пример прави, е да увеличи опитите за повторен опит от 5
до 10
.
sp_update_jobstep
съхранената процедура променя само тези настройки, за които са предоставени стойности на параметрите. Ако параметърът е пропуснат, текущата настройка се запазва.
Следователно в този случай бихме могли да пропуснем другите аргументи, като този:
EXEC sp_update_jobstep
@job_name = N'BackupMoviesDB',
@step_id = 1,
@retry_attempts = 10;
Проверете работата
Можете да използвате sp_help_job
за да получите информация за заданията на SQL Server Agent в системата.
Можете да го използвате със или без параметри, но за да получите подробности за стъпката на заданието, трябва да предоставите името или идентификатора на заданието.
Като това:
EXEC sp_help_job
@job_name = 'BackupMoviesDB';
Ето как изглежда резултатът при изпълнението му в SSMS:
Ето пример за кода при използване на идентификатора:
EXEC sp_help_job
@job_id = '158D714B-6686-48FD-BB41-D35C6EE70AED';
Когато използвате идентификатора, можете да пропуснете името на параметъра, ако желаете.
Пример:
EXEC sp_help_job '158D714B-6686-48FD-BB41-D35C6EE70AED';
Пълен синтаксис
Пълният синтаксис на sp_update_jobstep
става така:
sp_update_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 =] success_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_update_jobstep
за обяснение на всеки параметър, както и стойностите, които всеки приема.
Имайте предвид, че актуализирането на стъпка на задание увеличава номера на версията на заданието.