Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Добавяне на стъпка на задача към съществуваща задача на агент на SQL Server (T-SQL)

Когато създавате задание на SQL Server Agent с T-SQL, използвате sp_add_jobstep съхранена процедура за добавяне на всяка стъпка от заданието.

Ако някога трябва да добавите нова стъпка към това задание, можете да използвате sp_add_jobstep още веднъж, за да добавите новата стъпка за работа.

Но може също да се наложи да промените съществуващата стъпка, в зависимост от това как искате работата да продължи през стъпките.

Пример

В този пример създаваме задание с една стъпка на задание, след което използваме sp_add_jobstep за да добавите втора стъпка към тази работа. След това използваме sp_update_jobstep за да актуализирате първата стъпка на заданието, така че да премине към втората стъпка на заданието веднага щом завърши.

Създайте работата

Първо, създайте заданието с една стъпка:

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

Само за да е ясно, следната част беше частта, която добави стъпката:

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

Добавяне на нова стъпка за работа

Вече можем да използваме sp_add_jobstep отново, за да добавите нова стъпка към заданието.

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

Това добавя втора стъпка към работата.

Актуализиране на работния процес

Ако искате заданието автоматично да преминава от стъпка 1 към стъпка 2, ще трябва да посочите това в стъпка 1 на заданието.

Действието по подразбиране за всяка стъпка от заданието е успешно напускане на работата веднага щом тя успее. Ако стъпката е неуспешна, действието по подразбиране е да излезете с неуспех.

Така че, както в момента стои нашата работа, задачата ще приключи веднага след като стъпка 1 приключи (без да се изпълнява стъпка 2), а историята ще отчете, че задачата е изпълнена успешно.

Следователно, трябва да използваме sp_update_jobstep за да актуализирате стъпка 1, така че да премине към стъпка 2, след като завърши успешно.

Можем също да посочим какво да правим, ако стъпка 1 не успее.

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

В този случай уточних, че трябва да премине към следващата стъпка както ако успее, така и ако не успее.

Стойностите, които можете да предоставите на @on_success_action и @on_fail_action са както следва:

1 Откажете се с успех. Това е по подразбиране за @on_success_action .
2 Изход с неуспех. Това е по подразбиране за @on_fail_action .
3 Отидете към следващата стъпка.
4 Отидете на стъпка (ID). Тук предоставяте идентификационния номер на стъпка, към която искате да продължи работата.

Вижте стъпките на заданието

Можете да използвате sp_help_job за да получите информация за заданията на SQL Server Agent в системата.

Можете да го използвате със или без параметри, но за да получите подробности за стъпката на заданието, трябва да предоставите името или идентификатора на заданието.

Можем да го използваме, за да видим и двете стъпки на заданието, които сме създали за заданието.

Като това:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Ето как изглежда резултатът при изпълнението му в SSMS:

Ето пример за кода при използване на идентификатора:

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

Когато използвате идентификатора, можете да пропуснете името на параметъра, ако желаете.

Пример:

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

Можете също да използвате sp_help_jobstep по същия начин да върнете само стъпките на заданието (без цялата друга информация за заданието). Това приема името или идентификатора на заданието, както и незадължително име на стъпка или идентификатор.

Пълен синтаксис

Пълният синтаксис на sp_add_jobstep става така:

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

Вижте документацията на Microsoft за sp_add_jobstep за обяснение на всеки параметър, както и стойностите, които всеки приема.

Пълният синтаксис на sp_update_jobstep става така:

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

Вижте документацията на Microsoft за sp_update_jobstep за обяснение на всеки параметър, както и стойностите, които всеки приема.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да коригирате „Схемата на дяловете „...“ няма следваща използвана файлова група“ в SQL Server

  2. Ескейпиращ символ в SQL Server

  3. Какво прави SQL изявлението sargable?

  4. Име на колони за променлива на SQL Server?

  5. Как да изчистя буфера PRINT в TSQL?