sql >> Database teknologi >  >> RDS >> Sqlserver

Tilføj et jobtrin til et eksisterende SQL Server Agent-job (T-SQL)

Når du opretter et SQL Server Agent-job med T-SQL, bruger du sp_add_jobstep gemt procedure for at tilføje hvert jobtrin.

Hvis du nogensinde har brug for at tilføje et nyt trin til jobbet, kan du bruge sp_add_jobstep igen for at tilføje det nye jobtrin.

Men du skal muligvis også ændre det eksisterende trin, afhængigt af hvordan du ønsker, at jobbet skal komme videre gennem trinene.

Eksempel

I dette eksempel opretter vi et job med ét jobtrin, derefter bruger vi sp_add_jobstep at tilføje et andet trin til jobbet. Vi bruger derefter sp_update_jobstep for at opdatere det første jobtrin, så det går videre til det andet jobtrin, så snart det er fuldført.

Opret jobbet

Først skal du oprette jobbet med ét trin:

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

Bare for at være klar, var følgende del den bit, der tilføjede trinnet:

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

Tilføj et nyt job trin

Vi kan nu bruge sp_add_jobstep igen for at tilføje et nyt trin til jobbet.

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

Dette tilføjer et andet trin til jobbet.

Opdater arbejdsgangen

Hvis du vil have jobbet automatisk videre fra trin 1 til trin 2, skal du angive det i jobtrin 1.

Standardhandlingen for ethvert jobtrin er at afslutte jobbet med succes, så snart det lykkes. Hvis trinnet mislykkes, er standardhandlingen at afslutte med fejl.

Så som vores job er i øjeblikket, afsluttes jobbet, så snart trin 1 er afsluttet (uden at køre trin 2), og historikken vil rapportere, at jobbet kørte med succes.

Derfor skal vi bruge sp_update_jobstep for at opdatere trin 1, så det går videre til trin 2, når det er gennemført.

Vi kan også angive, hvad der skal gøres, hvis trin 1 mislykkes.

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

I dette tilfælde har jeg specificeret, at det skal gå videre til næste trin, både hvis det lykkes, og også hvis det mislykkes.

De værdier, du kan angive til @on_success_action og @on_fail_action er som følger:

1 Slut med succes. Dette er standarden for @on_success_action .
2 Afslut med fejl. Dette er standarden for @on_fail_action .
3 Gå til næste trin.
4 Gå til trin (ID). Det er her, du angiver ID'et for et trin, som du ønsker, at jobbet skal gå videre til.

Se jobtrinnene

Du kan bruge sp_help_job for at få information om SQL Server Agent-jobbene i systemet.

Du kan bruge det med eller uden parametre, men for at få jobtrindetaljerne skal du angive jobnavnet eller ID.

Vi kan bruge det til at se begge de jobtrin, vi har oprettet til jobbet.

Sådan:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Her er, hvordan resultatet ser ud, når det udføres i SSMS:

Her er et eksempel på koden, når du bruger ID'et:

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

Når du bruger ID'et, kan du udelade parameternavnet, hvis du ønsker det.

Eksempel:

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

Du kan også bruge sp_help_jobstep på samme måde for at returnere bare jobtrinene (uden al den anden info om jobbet). Dette accepterer jobnavnet eller ID'et samt et valgfrit trinnavn eller ID.

Fuld syntaks

Den fulde syntaks for sp_add_jobstep går sådan her:

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

Se Microsofts dokumentation for sp_add_jobstep for en forklaring af hver parameter, samt de værdier, som hver accepterer.

Den fulde syntaks for sp_update_jobstep går sådan her:

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

Se Microsofts dokumentation for sp_update_jobstep for en forklaring af hver parameter, samt de værdier, som hver accepterer.


  1. PostgreSQL matchende interval mellem start- og sluttidspunkt i forhold til tidsstempel

  2. Rownum i postgresql

  3. NUMTOYMINTERVAL() Funktion i Oracle

  4. Få kun dato uden tid i Oracle