In SQL Server können Sie den sp_update_job
verwenden gespeicherte Prozedur zum Ändern eines vorhandenen SQL Server-Agent-Auftrags.
Beispiel
In diesem Beispiel erstellen wir einen Job und verwenden dann sp_update_job
um diesen Job zu ändern.
Job erstellen
Erstellen Sie zuerst den Job:
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
Der obige Code verwendet fünf gespeicherte Prozeduren außer dem sp_update_job
Die Prozedur aktualisiert nur die Details, die mit sp_add_job
erstellt wurden Verfahren. Die anderen Prozeduren haben ihre eigene passende „Aktualisierungs“-Prozedur.
Nur um das klarzustellen, der folgende Teil ist der Teil, den wir mit sp_update_job
aktualisieren können Verfahren.
EXEC sp_add_job
@job_name = N'BakMovies',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
In diesem Fall haben wir beim Erstellen des Jobs nur drei Argumente angegeben. Die Prozedur akzeptiert tatsächlich viel mehr als das, aber das einzige erforderliche Argument ist der Name des Jobs.
Aktualisieren Sie den Job
Wir können jetzt sp_update_job
verwenden um den obigen Job zu ändern.
EXEC sp_update_job
@job_name = N'BakMovies',
@new_name = N'BackupMoviesDB',
@description = N'Backup the Movies database.',
@category_name = 'Database Maintenance';
In diesem Beispiel wird lediglich der Name des Jobs geändert.
Der sp_update_job
Die gespeicherte Prozedur ändert nur die Einstellungen, für die Parameterwerte bereitgestellt werden. Wird ein Parameter weggelassen, bleibt die aktuelle Einstellung erhalten.
Daher hätten wir in diesem Fall die Beschreibung und den Kategorienamen weglassen können:
EXEC sp_update_job
@job_name = N'BakMovies',
@new_name = N'BackupMoviesDB';
Einen Job deaktivieren
Sie können einen Job deaktivieren, indem Sie @enabled
setzen auf 0
:
EXEC sp_update_job
@job_name = N'BackupMoviesDB',
@new_name = N'BackupMoviesDB (DISABLED)',
@enabled = 0;
In diesem Beispiel habe ich auch den Namen des Jobs geändert, um deutlich zu machen, dass der Job deaktiviert ist.
Auftrag prüfen
Sie können sp_help_job
verwenden um die aktuellen Einstellungen eines Jobs anzuzeigen.
Sie können es mit oder ohne Parameter verwenden. Bei Verwendung ohne Parameter werden alle Jobs zurückgegeben.
EXEC sp_help_job;
Wenn Sie nur die Details eines Jobs sehen möchten, können Sie den Namen oder die ID des Jobs angeben.
So:
EXEC sp_help_job
@job_name = 'BackupMoviesDB';
So sieht das Ergebnis aus, wenn es in SSMS ausgeführt wird:
Wenn Sie den Namen angeben, müssen Sie sich jedoch an den Nachnamen erinnern, den Sie der Stelle gegeben haben. Wenn wir diese Prozedur in unserem Fall nach dem vorherigen Beispiel ausführen (wenn wir den Job deaktiviert haben), müssten wir Folgendes tun:
EXEC sp_help_job
@job_name = 'BackupMoviesDB (DISABLED)';
Die ID des Jobs bleibt jedoch konstant, sodass Sie diese unabhängig vom Namen des Jobs verwenden können.
Beispiel:
EXEC sp_help_job
@job_id = '158D714B-6686-48FD-BB41-D35C6EE70AED';
Wenn Sie die ID verwenden, können Sie den Parameternamen weglassen, wenn Sie möchten.
Beispiel:
EXEC sp_help_job '158D714B-6686-48FD-BB41-D35C6EE70AED';
Was passiert mit den Arbeitsschritten, dem Zeitplan usw.?
Durch das Ändern eines Jobs werden die Schritte und Zeitplaninformationen dieses Jobs nicht unterbrochen. Die Schritte und der Zeitplan eines Jobs bleiben intakt, nachdem Sie Änderungen vorgenommen haben.
Wenn Sie die Schritte oder den Zeitplan ändern müssen, müssen Sie die entsprechende gespeicherte Prozedur dafür verwenden (verwenden Sie beispielsweise sp_update_schedule
um seinen Zeitplan und sp_update_jobstep
zu aktualisieren um seinen Jobschritt zu aktualisieren).
Vollständige Syntax
Die vollständige Syntax von sp_update_job
geht so:
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 ]
Siehe die Microsoft-Dokumentation für sp_update_job
für eine Erläuterung jedes Parameters sowie der Werte, die jeder akzeptiert.