I SQL Server kan du använda sp_update_job
lagrad procedur för att ändra ett befintligt SQL Server Agent-jobb.
Exempel
I det här exemplet skapar vi ett jobb, sedan använder vi sp_update_job
för att ändra det jobbet.
Skapa jobbet
Skapa först jobbet:
USE msdb;
GO
EXEC sp_add_job
@job_name = N'BakMovies',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
GO
EXEC sp_add_jobstep
@job_name = N'BakMovies',
@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'BakMovies',
@schedule_name = N'Run_Sat_5AM';
GO
EXEC sp_add_jobserver
@job_name = N'BakMovies';
GO
Ovanstående kod använder fem lagrade procedurer men sp_update_job
proceduren uppdaterar endast de detaljer som skapades med sp_add_job
procedur. De andra procedurerna har sin egen matchande "uppdaterings"-procedur.
Så bara för att vara tydlig är följande del den del som vi kan uppdatera med sp_update_job
förfarande.
EXEC sp_add_job
@job_name = N'BakMovies',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
I det här fallet gav vi bara tre argument när vi skapade jobbet. Proceduren accepterar faktiskt mycket mer än så, men det enda nödvändiga argumentet är jobbets namn.
Uppdatera jobbet
Vi kan nu använda sp_update_job
för att ändra jobbet ovan.
EXEC sp_update_job
@job_name = N'BakMovies',
@new_name = N'BackupMoviesDB',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
Det enda detta exempel gör är att ändra namnet på jobbet.
sp_update_job
lagrad procedur ändrar endast de inställningar för vilka parametervärden tillhandahålls. Om en parameter utelämnas behålls den aktuella inställningen.
Därför kunde vi i det här fallet ha utelämnat beskrivningen och kategorinamnet:
EXEC sp_update_job
@job_name = N'BakMovies',
@new_name = N'BackupMoviesDB';
Inaktivera ett jobb
Du kan inaktivera ett jobb genom att ställa in @enabled
till 0
:
EXEC sp_update_job
@job_name = N'BackupMoviesDB',
@new_name = N'BackupMoviesDB (DISABLED)',
@enabled = 0;
I det här exemplet ändrade jag också jobbets namn för att göra det uppenbart att jobbet är inaktiverat.
Kontrollera jobbet
Du kan använda sp_help_job
för att visa aktuella inställningar för ett jobb.
Du kan använda den med eller utan parametrar. När den används utan parametrar returnerar den alla jobb.
EXEC sp_help_job;
Om du bara vill se detaljerna för ett jobb kan du ange jobbets namn eller ID.
Så här:
EXEC sp_help_job
@job_name = 'BackupMoviesDB';
Så här ser resultatet ut när du kör det i SSMS:
Men när du anger namnet måste du komma ihåg efternamnet som du gav jobbet. I vårt fall, om vi kör den här proceduren efter föregående exempel (när vi inaktiverade jobbet), skulle vi behöva göra detta:
EXEC sp_help_job
@job_name = 'BackupMoviesDB (DISABLED)';
Jobbets ID förblir dock konstant, så du kan använda det oavsett jobbets namn.
Exempel:
EXEC sp_help_job
@job_id = '158D714B-6686-48FD-BB41-D35C6EE70AED';
När du använder ID:t kan du utelämna parameternamnet om du vill.
Exempel:
EXEC sp_help_job '158D714B-6686-48FD-BB41-D35C6EE70AED';
Vad händer med jobbstegen, schemat etc?
Att ändra ett jobb bryter inte jobbets steg och schemainformation. Ett jobbs steg och schema förblir intakta efter att du har gjort några ändringar.
Om du behöver ändra stegen eller schemat måste du använda lämplig lagrad procedur för dem (till exempel använd sp_update_schedule
för att uppdatera dess schema och sp_update_jobstep
för att uppdatera sitt jobbsteg).
Full syntax
Den fullständiga syntaxen för sp_update_job
går så här:
sp_update_job [ @job_id =] job_id | [@job_name =] 'job_name'
[, [@new_name =] 'new_name' ]
[, [@enabled =] enabled ]
[, [@description =] 'description' ]
[, [@start_step_id =] step_id ]
[, [@category_name =] 'category' ]
[, [@owner_login_name =] 'login' ]
[, [@notify_level_eventlog =] eventlog_level ]
[, [@notify_level_email =] email_level ]
[, [@notify_level_netsend =] netsend_level ]
[, [@notify_level_page =] page_level ]
[, [@notify_email_operator_name =] 'operator_name' ]
[, [@notify_netsend_operator_name =] 'netsend_operator' ]
[, [@notify_page_operator_name =] 'page_operator' ]
[, [@delete_level =] delete_level ]
[, [@automatic_post =] automatic_post ]
Se Microsofts dokumentation för sp_update_job
för en förklaring av varje parameter, såväl som de värden som var och en accepterar.