Khi bạn tạo công việc SQL Server Agent với T-SQL, bạn sử dụng sp_add_jobstep
thủ tục được lưu trữ để thêm từng bước công việc.
Nếu bạn cần thêm một bước mới cho công việc đó, bạn có thể sử dụng sp_add_jobstep
một lần nữa để thêm bước công việc mới.
Nhưng bạn cũng có thể cần sửa đổi bước hiện có, tùy thuộc vào cách bạn muốn công việc tiến triển qua các bướ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_add_jobstep
để thêm bước thứ hai cho công việc đó. Sau đó, chúng tôi sử dụng sp_update_jobstep
cập nhật bước công việc đầu tiên để nó tiến tới bước công việc thứ hai ngay sau khi hoàn thành.
Tạo công việc
Trước tiên, hãy tạo công việc bằng một bước:
USE msdb;
GO
EXEC sp_add_job
@job_name = N'SqlAgentTest',
@description = N'Insert data.',
@category_name = 'Database Maintenance';
GO
EXEC sp_add_jobstep
@job_name = N'SqlAgentTest',
@step_name = N'Insert data for step 1',
@subsystem = N'TSQL',
@command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 1, SYSDATETIME())';
GO
EXEC sp_add_schedule
@schedule_name = N'Run_Sat_6AM',
@freq_type = 8,
@freq_interval = 64,
@freq_recurrence_factor = 1,
@active_start_time = 060000;
GO
EXEC sp_attach_schedule
@job_name = N'SqlAgentTest',
@schedule_name = N'Run_Sat_6AM';
GO
EXEC sp_add_jobserver
@job_name = N'SqlAgentTest';
GO
Chỉ cần nói rõ, phần sau là bit đã thêm bước:
EXEC sp_add_jobstep
@job_name = N'SqlAgentTest',
@step_name = N'Insert data for step 1',
@subsystem = N'TSQL',
@command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 1, SYSDATETIME())';
Thêm một bước công việc mới
Bây giờ chúng ta có thể sử dụng sp_add_jobstep
một lần nữa để thêm một bước mới cho công việc.
USE msdb;
EXEC sp_add_jobstep
@job_name = N'SqlAgentTest',
@step_name = N'Insert data for step 2',
@subsystem = N'TSQL',
@command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 2, SYSDATETIME())';
Điều này bổ sung thêm bước thứ hai cho công việc.
Cập nhật Quy trình làm việc
Nếu bạn muốn công việc tự động tiến triển từ bước 1 đến bước 2, bạn cần chỉ định điều đó trong bước công việc 1.
Hành động mặc định cho bất kỳ bước công việc nào là bỏ công việc thành công ngay khi nó thành công. Nếu bước không thành công, hành động mặc định là thoát khi không thành công.
Vì vậy, khi công việc của chúng tôi hiện tại, công việc sẽ kết thúc ngay sau khi bước 1 hoàn thành (không chạy bước 2) và lịch sử sẽ báo cáo rằng công việc đã chạy thành công.
Do đó, chúng ta cần sử dụng sp_update_jobstep
cập nhật bước 1, để bước này chuyển sang bước 2 sau khi hoàn thành thành công.
Chúng tôi cũng có thể chỉ định phải làm gì nếu bước 1 không thành công.
USE msdb;
EXEC sp_update_jobstep
@job_name = N'SqlAgentTest',
@step_id = 1,
@on_success_action = 3,
@on_fail_action = 3;
Trong trường hợp này, tôi đã chỉ định rằng nó sẽ chuyển sang bước tiếp theo cả nếu nó thành công và cả nếu nó không thành công.
Các giá trị mà bạn có thể cung cấp cho @on_success_action
và @on_fail_action
như sau:
1 | Thoát thành công. Đây là giá trị mặc định cho @on_success_action . |
2 | Thoát mà không thành công. Đây là mặc định cho @on_fail_action . |
3 | Chuyển sang bước tiếp theo. |
4 | Chuyển đến bước (ID). Đây là nơi bạn cung cấp ID của bước mà bạn muốn công việc tiến triển. |
Xem các bước 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.
Chúng tôi có thể sử dụng nó để xem cả hai bước công việc mà chúng tôi đã tạo cho công việc.
Như thế này:
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Đâ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 = '343D9F2A-070A-4367-BF69-4248FFF57D70';
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 '343D9F2A-070A-4367-BF69-4248FFF57D70';
Bạn cũng có thể sử dụng sp_help_jobstep
theo cách tương tự để chỉ trả lại các bước công việc (không có tất cả các thông tin khác về công việc). Điều này chấp nhận tên hoặc ID công việc, cũng như tên hoặc ID bước tùy chọn.
Cú pháp đầy đủ
Cú pháp đầy đủ của sp_add_jobstep
như sau:
sp_add_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 = ] 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_add_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.
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.