sql >> Database >  >> RDS >> Sqlserver

Een taakstap toevoegen aan een bestaande SQL Server Agent-taak (T-SQL)

Wanneer u een SQL Server Agent-taak maakt met T-SQL, gebruikt u de sp_add_jobstep opgeslagen procedure om elke taakstap toe te voegen.

Als u ooit een nieuwe stap aan die taak moet toevoegen, kunt u sp_add_jobstep gebruiken nogmaals om de nieuwe taakstap toe te voegen.

Maar het kan ook zijn dat u de bestaande stap moet wijzigen, afhankelijk van hoe u wilt dat de taak de stappen doorloopt.

Voorbeeld

In dit voorbeeld maken we een job aan met één jobstap, dan gebruiken we sp_add_jobstep om een ​​tweede stap aan die baan toe te voegen. We gebruiken dan sp_update_jobstep om de eerste taakstap bij te werken zodat deze doorgaat naar de tweede taakstap zodra deze is voltooid.

Maak de taak

Maak eerst de taak in één stap:

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

Voor de duidelijkheid, het volgende deel was het stukje dat de stap toevoegde:

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

Een nieuwe taak toevoegen Stap

We kunnen nu sp_add_jobstep . gebruiken om een ​​nieuwe stap aan de taak toe te voegen.

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

Dit voegt een tweede stap toe aan het werk.

Werkstroom bijwerken

Als u wilt dat de taak automatisch van stap 1 naar stap 2 gaat, moet u dat specificeren in taakstap 1.

De standaardactie voor elke taakstap is om de taak met succes te beëindigen zodra deze is gelukt. Als de stap mislukt, is de standaardactie om te stoppen met een fout.

Dus zoals onze taak er momenteel uitziet, zal de taak eindigen zodra stap 1 is voltooid (zonder stap 2) uit te voeren, en de geschiedenis zal melden dat de taak met succes is uitgevoerd.

Daarom moeten we sp_update_jobstep . gebruiken om stap 1 bij te werken, zodat het doorgaat naar stap 2 zodra het succesvol is voltooid.

We kunnen ook specificeren wat te doen als stap 1 mislukt.

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

In dit geval heb ik aangegeven dat het naar de volgende stap moet gaan, zowel als het lukt, en ook als het mislukt.

De waarden die u kunt verstrekken aan @on_success_action en @on_fail_action zijn als volgt:

1 Stop met succes. Dit is de standaardinstelling voor @on_success_action .
2 Afsluiten met fout. Dit is de standaardinstelling voor @on_fail_action .
3 Ga naar de volgende stap.
4 Ga naar stap (ID). Hier geeft u de ID op van een stap waarvoor u de taak wilt laten verlopen.

Bekijk de taakstappen

U kunt sp_help_job . gebruiken om informatie te krijgen over de SQL Server Agent-taken in het systeem.

U kunt het met of zonder parameters gebruiken, maar om de details van de taakstap te krijgen, moet u de taaknaam of ID opgeven.

We kunnen het gebruiken om beide taakstappen te zien die we voor de taak hebben gemaakt.

Zoals dit:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Hier is hoe het resultaat eruit ziet wanneer het wordt uitgevoerd in SSMS:

Hier is een voorbeeld van de code bij gebruik van de ID:

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

Als u de ID gebruikt, kunt u desgewenst de parameternaam weglaten.

Voorbeeld:

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

U kunt ook sp_help_jobstep . gebruiken op dezelfde manier om alleen de taakstappen terug te geven (zonder alle andere informatie over de taak). Dit accepteert de taaknaam of ID, evenals een optionele stapnaam of ID.

Volledige syntaxis

De volledige syntaxis van sp_add_jobstep gaat als volgt:

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

Zie de documentatie van Microsoft voor sp_add_jobstep voor een uitleg van elke parameter, evenals de waarden die elke parameter accepteert.

De volledige syntaxis van sp_update_jobstep gaat als volgt:

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

Zie de documentatie van Microsoft voor sp_update_jobstep voor een uitleg van elke parameter, evenals de waarden die elke parameter accepteert.


  1. Hoe u de laatste dag van de maand voor een bepaalde datum kunt vinden in MySQL

  2. opatchvoorwaarde

  3. Hoe TRUNCATE() werkt in MariaDB

  4. Denormalisatie:wanneer, waarom en hoe