Em um artigo anterior sobre como criar um trabalho do SQL Server Agent com T-SQL, demonstrei como criar um trabalho com uma única etapa.
Neste artigo, mostrarei como criar um trabalho com várias etapas.
Exemplo
Ao criar um trabalho do SQL Server Agent com T-SQL, você precisa usar vários procedimentos armazenados. Isso ocorre porque cada parte é tratada de forma independente das demais. Por exemplo, o
sp_add_job
procedimento cria o trabalho e o sp_add_jobstep
procedimento cria uma etapa nesse trabalho. Ao criar um trabalho com mais de uma etapa, você precisa chamar
sp_add_jobstep
várias vezes, cada chamada definindo uma etapa diferente. Além disso, se você quiser que o trabalho progrida pelas etapas (e não saia do trabalho após a primeira etapa), será necessário especificar isso ao chamar o procedimento.
Aqui está um exemplo que faz tudo isso.
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
Esse código cria um trabalho com duas etapas de trabalho. Ele também cria um novo agendamento, anexa esse trabalho ao agendamento e direciona o trabalho para o servidor local.
A parte que cria as etapas do trabalho é esta:
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
Na primeira chamada, a parte que vai
@on_success_action = 3
é o que faz o trabalho continuar para a próxima etapa. O valor padrão é
1
, o que significa que o trabalho será encerrado após a conclusão da primeira etapa (que é o que especificamos na segunda etapa). Então, se não tivéssemos incluído o @on_success_action = 3
parte na primeira etapa, o trabalho seria encerrado sem prosseguir para a próxima etapa. Você também pode especificar
@on_fail_action
, que especifica o que acontecerá se essa etapa falhar. Os valores que você pode fornecer para
@on_success_action
e @on_fail_action
são como segue:1 | Saia com sucesso. Este é o padrão para @on_success_action . |
2 | Sair com falha. Este é o padrão para @on_fail_action . |
3 | Vá para a próxima etapa. |
4 | Vá para a etapa (ID). É aqui que você fornece o ID de uma etapa para a qual deseja que o trabalho avance. |
Visualizar as etapas do trabalho
Você pode usar
sp_help_job
para obter informações sobre os trabalhos do SQL Server Agent no sistema. Você pode usá-lo com ou sem parâmetros, mas para obter os detalhes da etapa do trabalho, você precisa fornecer o nome ou ID do trabalho.
Podemos usá-lo para ver as duas etapas de trabalho que criamos para o trabalho.
Assim:
EXEC sp_help_job
@job_name = 'SqlAgentTest';
Veja como fica o resultado ao executá-lo no SSMS:
Aqui está um exemplo do código ao usar o ID:
EXEC sp_help_job
@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';
Ao usar o ID, você pode omitir o nome do parâmetro, se desejar.
Exemplo:
EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';
Você também pode usar
sp_help_jobstep
da mesma forma para retornar apenas as etapas do trabalho (sem todas as outras informações sobre o trabalho). Isso aceita o nome ou ID do trabalho, bem como um nome ou ID de etapa opcional. Sintaxe Completa
A sintaxe completa de
sp_add_jobstep
fica assim: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' } ]
Consulte a documentação da Microsoft para
sp_add_jobstep
para uma explicação de cada parâmetro, bem como os valores que cada um aceita.