I SQL Server kan du bruge sp_update_jobstep
gemt procedure til at ændre et eksisterende jobtrin i et SQL Server Agent-job.
Når du opretter et SQL Server Agent-job, opretter du et eller flere jobtrin for det pågældende job. sp_update_jobstep
procedure giver dig mulighed for at opdatere et specifikt jobtrin uafhængigt af det faktiske job eller andre jobtrin.
Eksempel
I dette eksempel opretter vi et job med ét jobtrin, derefter bruger vi sp_update_jobstep
for at ændre jobtrinnet.
Opret jobbet
Først skal du oprette jobbet:
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
Ovenstående kode bruger fem lagrede procedurer, men sp_add_jobstep
procedure er den eneste, der indeholder de detaljer, der kan ændres med sp_update_jobstep
. De andre procedurer har deres egne matchende "opdaterings"-procedurer (såsom sp_update_job
og sp_update_schedule
).
Så bare for at være klar, er den følgende del den del, som vi kan opdatere med sp_update_jobstep
procedure.
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;
I dette tilfælde gav vi seks argumenter, da vi oprettede jobbet. Proceduren accepterer faktisk meget mere end det, men det vil gøre det til vores formål.
Opdater jobtrinnet
Vi kan nu bruge sp_update_jobstep
for at ændre ovenstående jobtrin.
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;
Det eneste, dette eksempel gør, er at øge antallet af genforsøg fra 5
til 10
.
sp_update_jobstep
gemt procedure ændrer kun de indstillinger, for hvilke parameterværdier er leveret. Hvis en parameter udelades, bibeholdes den aktuelle indstilling.
Derfor kunne vi i dette tilfælde have udeladt de andre argumenter, som dette:
EXEC sp_update_jobstep
@job_name = N'BackupMoviesDB',
@step_id = 1,
@retry_attempts = 10;
Tjek opgaven
Du kan bruge sp_help_job
for at få oplysninger om SQL Server Agent-jobbene i systemet.
Du kan bruge det med eller uden parametre, men for at få jobtrindetaljerne skal du angive jobnavnet eller ID.
Sådan:
EXEC sp_help_job
@job_name = 'BackupMoviesDB';
Her er, hvordan resultatet ser ud, når det udføres i SSMS:

Her er et eksempel på koden, når du bruger ID'et:
EXEC sp_help_job
@job_id = '158D714B-6686-48FD-BB41-D35C6EE70AED';
Når du bruger ID'et, kan du udelade parameternavnet, hvis du ønsker det.
Eksempel:
EXEC sp_help_job '158D714B-6686-48FD-BB41-D35C6EE70AED';
Fuld syntaks
Den fulde syntaks for sp_update_jobstep
går sådan her:
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' }
Se Microsofts dokumentation for sp_update_jobstep
for en forklaring af hver parameter, samt de værdier, som hver accepterer.
Bemærk, at opdatering af et jobtrin øger jobversionsnummeret.