Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tạo công việc tác nhân máy chủ SQL nhiều bước (T-SQL)

Trong bài viết trước về cách tạo công việc SQL Server Agent với T-SQL, tôi đã trình bày cách tạo công việc chỉ với một bước.

Trong bài viết này, tôi sẽ hướng dẫn bạn cách tạo một công việc với nhiều bước.

Ví dụ

Khi bạn tạo công việc SQL Server Agent với T-SQL, bạn cần sử dụng một số thủ tục được lưu trữ. Điều này là do mỗi phần được đối xử độc lập với những phần khác. Ví dụ:sp_add_job thủ tục tạo công việc và sp_add_jobstep thủ tục tạo ra một bước trong công việc đó.

Khi bạn tạo một công việc có nhiều bước, bạn cần gọi sp_add_jobstep nhiều lần, mỗi cuộc gọi xác định một bước khác nhau.

Ngoài ra, nếu bạn muốn công việc tiến triển qua các bước (và không thoát khỏi công việc sau bước đầu tiên), bạn sẽ cần chỉ định điều đó khi bạn gọi thủ tục.

Đây là một ví dụ thực hiện tất cả những điều đó.

USE msdb;  
GO  
EXEC sp_add_job  
    @job_name = N'SqlAgentTest',
    @description = N'Backup the Movies database.',
    @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())',  
    @on_success_action = 3;
GO
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())',  
    @on_success_action = 1;
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',  
    @server_name = N'(LOCAL)';
GO

Mã đó tạo ra một công việc với hai bước công việc. Nó cũng tạo một lịch biểu mới, đính kèm công việc đó vào lịch biểu, sau đó nhắm mục tiêu công việc đó tại máy chủ cục bộ.

Phần tạo ra các bước công việc là:

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())',  
    @on_success_action = 3;
GO
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())',  
    @on_success_action = 1;
GO

Trong lần gọi đầu tiên, phần diễn ra @on_success_action = 3 là những gì làm cho công việc tiếp tục đến bước tiếp theo.

Giá trị mặc định là 1 , có nghĩa là công việc sẽ ngừng hoạt động sau khi hoàn thành bước đầu tiên (đó là những gì chúng tôi đã chỉ định trong bước thứ hai). Vì vậy, nếu chúng tôi không bao gồm @on_success_action = 3 trong bước đầu tiên, công việc sẽ dừng lại mà không cần tiếp tục bước tiếp theo.

Bạn cũng có thể chỉ định @on_fail_action , chỉ định điều gì sẽ xảy ra nếu bước đó không thành công.

Các giá trị mà bạn có thể cung cấp cho @on_success_action@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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giá trị NULL bên trong mệnh đề NOT IN

  2. Sự cố sao chép giao dịch SQL Server

  3. Toán tử logic AND trong SQL Server là gì - Hướng dẫn sử dụng SQL Server / TSQL Phần 120

  4. Loại biến không mong muốn được trả về bởi Nhận-Công việc

  5. Di chuyển dữ liệu SQL từ bảng này sang bảng khác