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

Buat Pekerjaan Agen Server SQL Multi-Langkah (T-SQL)

Dalam artikel sebelumnya tentang membuat pekerjaan Agen Server SQL dengan T-SQL, saya menunjukkan cara membuat pekerjaan dengan satu langkah.

Dalam artikel ini, saya akan menunjukkan cara membuat pekerjaan dengan beberapa langkah.

Contoh

Saat Anda membuat pekerjaan Agen Server SQL dengan T-SQL, Anda perlu menggunakan beberapa prosedur tersimpan. Hal ini karena setiap bagian diperlakukan secara independen terhadap yang lain. Misalnya, sp_add_job prosedur membuat pekerjaan, dan sp_add_jobstep prosedur menciptakan langkah dalam pekerjaan itu.

Saat Anda membuat pekerjaan yang memiliki lebih dari satu langkah, Anda perlu memanggil sp_add_jobstep beberapa kali, setiap panggilan menentukan langkah yang berbeda.

Selain itu, jika Anda ingin pekerjaan berlanjut melalui langkah-langkah (dan tidak keluar dari pekerjaan setelah langkah pertama), Anda harus menentukannya saat memanggil prosedur.

Berikut adalah contoh yang melakukan semua itu.

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

Kode itu membuat pekerjaan dengan dua langkah pekerjaan. Itu juga membuat jadwal baru, melampirkan pekerjaan itu ke jadwal, lalu menargetkan pekerjaan di server lokal.

Bagian yang membuat langkah-langkah pekerjaan adalah ini:

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

Pada panggilan pertama, bagian yang berbunyi @on_success_action = 3 inilah yang membuat pekerjaan berlanjut ke langkah berikutnya.

Nilai defaultnya adalah 1 , yang berarti pekerjaan akan berhenti setelah menyelesaikan langkah pertama (yang kami tentukan di langkah kedua). Jadi jika kami tidak menyertakan @on_success_action = 3 bagian dalam langkah pertama, pekerjaan akan berhenti tanpa melanjutkan ke langkah berikutnya.

Anda juga dapat menentukan @on_fail_action , yang menentukan apa yang akan terjadi jika langkah tersebut 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menghitung jarak antara dua titik (Lintang, Bujur)

  2. SQL Server menggunakan CPU tinggi saat mencari di dalam string nvarchar

  3. Bagaimana cara mengatur nama tabel dalam kueri SQL dinamis?

  4. Tidak dapat masuk ke SQL Server + Otentikasi SQL Server + Kesalahan:18456

  5. Masukkan Data di SQL Server 2017