Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Tambahkan Langkah Pekerjaan ke Pekerjaan Agen Server SQL yang Ada (T-SQL)

Saat Anda membuat pekerjaan Agen Server SQL dengan T-SQL, Anda menggunakan sp_add_jobstep prosedur tersimpan untuk menambahkan setiap langkah pekerjaan.

Jika Anda perlu menambahkan langkah baru ke pekerjaan itu, Anda dapat menggunakan sp_add_jobstep sekali lagi untuk menambahkan langkah pekerjaan baru.

Namun Anda mungkin juga perlu mengubah langkah yang ada, bergantung pada bagaimana Anda ingin kemajuan pekerjaan melalui langkah-langkah tersebut.

Contoh

Pada contoh ini kita membuat job dengan satu job step, kemudian kita menggunakan sp_add_jobstep untuk menambahkan langkah kedua ke pekerjaan itu. Kami kemudian menggunakan sp_update_jobstep untuk memperbarui langkah tugas pertama agar dapat melanjutkan ke langkah tugas kedua segera setelah selesai.

Buat Pekerjaan

Pertama, buat pekerjaan dengan satu langkah:

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

Untuk memperjelas, bagian berikut adalah bagian yang menambahkan langkah:

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())';

Tambahkan Langkah Pekerjaan Baru

Sekarang kita dapat menggunakan sp_add_jobstep lagi untuk menambahkan langkah baru ke pekerjaan.

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())';

Ini menambahkan langkah kedua untuk pekerjaan itu.

Perbarui Alur Kerja

Jika Anda ingin pekerjaan maju secara otomatis dari langkah 1 ke langkah 2, Anda harus menentukannya di langkah pekerjaan 1.

Tindakan default untuk langkah pekerjaan apa pun adalah berhenti dari pekerjaan dengan sukses segera setelah berhasil. Jika langkah tersebut gagal, tindakan default adalah berhenti dengan kegagalan.

Jadi seperti pekerjaan kita saat ini, pekerjaan akan selesai segera setelah langkah 1 selesai (tanpa menjalankan langkah 2), dan riwayat akan melaporkan bahwa pekerjaan berhasil dijalankan.

Oleh karena itu, kita perlu menggunakan sp_update_jobstep untuk memperbarui langkah 1, sehingga berlanjut ke langkah 2 setelah berhasil diselesaikan.

Kami juga dapat menentukan apa yang harus dilakukan jika langkah 1 gagal.

USE msdb;
EXEC sp_update_jobstep  
    @job_name = N'SqlAgentTest',  
    @step_id = 1,  
    @on_success_action = 3,  
    @on_fail_action = 3;

Dalam hal ini saya telah menetapkan bahwa itu harus maju ke langkah berikutnya baik jika berhasil, dan juga jika gagal.

Nilai yang dapat Anda berikan ke @on_success_action dan @on_fail_action adalah sebagai berikut:

1 Berhenti dengan sukses. Ini adalah default untuk @on_success_action .
2 Berhenti dengan kegagalan. Ini adalah default untuk @on_fail_action .
3 Lanjutkan ke langkah berikutnya.
4 Langsung ke langkah (ID). Di sinilah Anda memberikan ID langkah yang Anda inginkan untuk kemajuan pekerjaan.

Lihat Langkah-Langkah Pekerjaan

Anda dapat menggunakan sp_help_job untuk mendapatkan informasi tentang pekerjaan SQL Server Agent di sistem.

Anda dapat menggunakannya dengan atau tanpa parameter, tetapi untuk mendapatkan detail langkah pekerjaan, Anda harus memberikan nama atau ID pekerjaan.

Kita dapat menggunakannya untuk melihat kedua langkah pekerjaan yang kita buat untuk pekerjaan tersebut.

Seperti ini:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Begini hasilnya saat dijalankan di SSMS:

Berikut contoh kode saat menggunakan ID:

EXEC sp_help_job 
	@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';

Saat menggunakan ID, Anda dapat menghilangkan nama parameter jika diinginkan.

Contoh:

EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';

Anda juga dapat menggunakan sp_help_jobstep dengan cara yang sama untuk mengembalikan hanya langkah-langkah pekerjaan (tanpa semua info lain tentang pekerjaan itu). Ini menerima nama atau ID pekerjaan, serta nama atau ID langkah opsional.

Sintaks Penuh

Sintaks lengkap sp_add_jobstep seperti ini:

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' } ]

Lihat dokumentasi Microsoft untuk sp_add_jobstep untuk penjelasan setiap parameter, serta nilai yang diterima masing-masing.

Sintaks lengkap sp_update_jobstep seperti ini:

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' }

Lihat dokumentasi Microsoft untuk sp_update_jobstep untuk penjelasan setiap parameter, serta nilai yang diterima masing-masing.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 Cara Mengembalikan Daftar Pemicu di Database SQL Server menggunakan T-SQL

  2. Bagaimana saya bisa mengelompokkan berdasarkan kolom tanggal waktu tanpa mempertimbangkan waktu?

  3. Manajemen Indeks SQL Server Menggunakan Manajer Indeks untuk SQL Server

  4. Memanggil prosedur tersimpan menggunakan VBA

  5. Apa itu file MDF?