Trong SQL Server, bạn có thể sử dụng sp_update_jobstep
thủ tục được lưu trữ để sửa đổi bước công việc hiện có của công việc SQL Server Agent.
Khi bạn tạo công việc SQL Server Agent, bạn tạo một hoặc nhiều bước công việc cho công việc đó. sp_update_jobstep
quy trình cho phép bạn cập nhật một bước công việc cụ thể độc lập với công việc thực tế hoặc bất kỳ bước công việc nào khác.
Ví dụ
Trong ví dụ này, chúng tôi tạo một công việc với một bước công việc, sau đó chúng tôi sử dụng sp_update_jobstep
để sửa đổi bước công việc.
Tạo công việc
Đầu tiên, hãy tạo công việc:
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
Đoạn mã trên sử dụng năm thủ tục được lưu trữ, nhưng sp_add_jobstep
là thủ tục duy nhất chứa các chi tiết có thể được thay đổi bằng sp_update_jobstep
. Các thủ tục khác có các thủ tục “cập nhật” phù hợp của riêng chúng (chẳng hạn như sp_update_job
và sp_update_schedule
).
Vì vậy, chỉ cần nói rõ, phần sau là phần mà chúng ta có thể cập nhật với sp_update_jobstep
thủ tục.
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;
Trong trường hợp này, chúng tôi đã cung cấp sáu đối số khi tạo công việc. Thủ tục thực sự chấp nhận nhiều hơn thế, nhưng điều này sẽ làm cho các mục đích của chúng tôi.
Cập nhật bước công việc
Bây giờ chúng ta có thể sử dụng sp_update_jobstep
để sửa đổi bước công việc trên.
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;
Điều duy nhất mà ví dụ này làm là tăng số lần thử lại từ 5
thành 10
.
sp_update_jobstep
thủ tục được lưu trữ chỉ thay đổi những cài đặt mà các giá trị tham số được cung cấp. Nếu một tham số bị bỏ qua, cài đặt hiện tại sẽ được giữ lại.
Do đó, trong trường hợp này, chúng tôi có thể đã bỏ qua các đối số khác, như sau:
EXEC sp_update_jobstep
@job_name = N'BackupMoviesDB',
@step_id = 1,
@retry_attempts = 10;
Kiểm tra công việc
Bạn có thể sử dụng sp_help_job
để nhận thông tin về các công việc SQL Server Agent trong hệ thống.
Bạn có thể sử dụng nó có hoặc không có tham số, nhưng để biết chi tiết bước công việc, bạn cần cung cấp tên hoặc ID công việc.
Như thế này:
EXEC sp_help_job
@job_name = 'BackupMoviesDB';
Đây là kết quả trông như thế nào khi thực thi nó trong SSMS:
Dưới đây là ví dụ về mã khi sử dụng ID:
EXEC sp_help_job
@job_id = '158D714B-6686-48FD-BB41-D35C6EE70AED';
Khi sử dụng ID, bạn có thể bỏ qua tên tham số nếu muốn.
Ví dụ:
EXEC sp_help_job '158D714B-6686-48FD-BB41-D35C6EE70AED';
Cú pháp đầy đủ
Cú pháp đầy đủ của sp_update_jobstep
như sau:
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' }
Xem tài liệu của Microsoft về sp_update_jobstep
để biết giải thích về từng tham số, cũng như các giá trị mà mỗi tham số chấp nhận.
Lưu ý rằng việc cập nhật một bước công việc sẽ làm tăng số phiên bản công việc.