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

Creazione di un processo di SQL Server Agent in più passaggi (T-SQL)

In un precedente articolo sulla creazione di un processo di SQL Server Agent con T-SQL, ho dimostrato come creare un processo con un solo passaggio.

In questo articolo ti mostrerò come creare un lavoro con più passaggi.

Esempio

Quando si crea un processo di SQL Server Agent con T-SQL, è necessario utilizzare diverse stored procedure. Questo perché ogni parte è trattata indipendentemente dalle altre. Ad esempio, il sp_add_job la procedura crea il lavoro e il sp_add_jobstep procedura crea un passaggio in quel lavoro.

Quando crei un lavoro che ha più di un passaggio, devi chiamare sp_add_jobstep più volte, ogni chiamata definisce un passaggio diverso.

Inoltre, se vuoi che il lavoro prosegua attraverso i passaggi (e non esca dal lavoro dopo il primo passaggio), dovrai specificarlo quando chiami la procedura.

Ecco un esempio che fa tutto questo.

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

Quel codice crea un lavoro con due fasi del lavoro. Crea anche una nuova pianificazione, allega quel lavoro alla pianificazione, quindi indirizza il lavoro sul server locale.

La parte che crea le fasi del lavoro è questa:

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

Nella prima chiamata, la parte che va @on_success_action = 3 è ciò che fa continuare il lavoro al passaggio successivo.

Il valore predefinito è 1 , il che significa che il lavoro verrà chiuso dopo il completamento del primo passaggio (che è ciò che abbiamo specificato nel secondo passaggio). Quindi se non avessimo incluso il @on_success_action = 3 parte del primo passaggio, il lavoro verrebbe interrotto senza passare al passaggio successivo.

Puoi anche specificare @on_fail_action , che specifica cosa accadrà se quel passaggio non riesce.

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.