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

Aggiungere un passaggio del processo a un processo di SQL Server Agent esistente (T-SQL)

Quando crei un processo di SQL Server Agent con T-SQL, usi sp_add_jobstep stored procedure per aggiungere ogni fase del lavoro.

Se hai bisogno di aggiungere un nuovo passaggio a quel lavoro, puoi utilizzare sp_add_jobstep ancora una volta per aggiungere il nuovo passaggio del lavoro.

Ma potresti anche dover modificare il passaggio esistente, a seconda di come desideri che il lavoro avanzi nei passaggi.

Esempio

In questo esempio, creiamo un lavoro con una fase di lavoro, quindi utilizziamo sp_add_jobstep per aggiungere un secondo passaggio a quel lavoro. Quindi utilizziamo sp_update_jobstep per aggiornare la prima fase di lavoro in modo che passi alla seconda fase di lavoro non appena viene completata.

Crea il lavoro

Innanzitutto, crea il lavoro con un passaggio:

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

Giusto per essere chiari, la parte seguente è stata la parte che ha aggiunto il passaggio:

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

Aggiungi un nuovo passaggio di lavoro

Ora possiamo usare sp_add_jobstep di nuovo per aggiungere un nuovo passaggio al lavoro.

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

Questo aggiunge un secondo passaggio al lavoro.

Aggiorna il flusso di lavoro

Se desideri che il lavoro avanzi automaticamente dal passaggio 1 al passaggio 2, dovrai specificarlo nel passaggio 1 del lavoro.

L'azione predefinita per qualsiasi fase del lavoro consiste nell'abbandonare il lavoro con successo non appena riesce. Se il passaggio ha esito negativo, l'azione predefinita è uscire con un errore.

Quindi, allo stato attuale del nostro lavoro, il lavoro terminerà non appena il passaggio 1 è stato completato (senza eseguire il passaggio 2) e la cronologia segnalerà che il lavoro è stato eseguito correttamente.

Pertanto, dobbiamo usare sp_update_jobstep per aggiornare il passaggio 1, in modo che passi al passaggio 2 una volta completato correttamente.

Possiamo anche specificare cosa fare se il passaggio 1 non riesce.

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

In questo caso ho specificato che dovrebbe passare al passaggio successivo sia se riesce, sia se fallisce.

I valori che puoi fornire a @on_success_action e @on_fail_action sono i seguenti:

1 Chiudi con successo. Questa è l'impostazione predefinita per @on_success_action .
2 Chiudi con errore. Questa è l'impostazione predefinita per @on_fail_action .
3 Vai al passaggio successivo.
4 Vai al passaggio (ID). Qui è dove fornisci l'ID di un passaggio per il quale desideri che il lavoro avanzi.

Visualizza le fasi del lavoro

Puoi usare sp_help_job per ottenere informazioni sui processi di SQL Server Agent nel sistema.

Puoi usarlo con o senza parametri, ma per ottenere i dettagli della fase del lavoro, devi fornire il nome o l'ID del lavoro.

Possiamo usarlo per vedere entrambi i passaggi del lavoro che abbiamo creato per il lavoro.

In questo modo:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Ecco come appare il risultato quando lo si esegue in SSMS:

Ecco un esempio del codice quando si utilizza l'ID:

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

Quando si utilizza l'ID, se lo si desidera, è possibile omettere il nome del parametro.

Esempio:

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

Puoi anche usare sp_help_jobstep allo stesso modo per restituire solo i passaggi del lavoro (senza tutte le altre informazioni sul lavoro). Questo accetta il nome o l'ID del lavoro, nonché un nome o ID del passaggio facoltativo.

Sintassi completa

La sintassi completa di sp_add_jobstep va così:

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

Consulta la documentazione di Microsoft per sp_add_jobstep per una spiegazione di ciascun parametro, nonché dei valori che ciascuno accetta.

La sintassi completa di sp_update_jobstep va così:

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

Consulta la documentazione di Microsoft per sp_update_jobstep per una spiegazione di ciascun parametro, nonché dei valori che ciascuno accetta.