Ao criar um trabalho do SQL Server Agent com T-SQL, você usa o
sp_add_jobstep
procedimento armazenado para adicionar cada etapa do trabalho. Se você precisar adicionar uma nova etapa a esse trabalho, use
sp_add_jobstep
mais uma vez para adicionar a nova etapa de trabalho. Mas você também pode precisar modificar a etapa existente, dependendo de como deseja que o trabalho progrida pelas etapas.
Exemplo
Neste exemplo, criamos um trabalho com uma etapa de trabalho e usamos
sp_add_jobstep
para adicionar uma segunda etapa a esse trabalho. Em seguida, usamos sp_update_jobstep
para atualizar a primeira etapa da tarefa para que progrida para a segunda etapa da tarefa assim que for concluída. Criar o trabalho
Primeiro, crie o trabalho com uma etapa:
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
Só para ficar claro, a parte a seguir foi a parte que adicionou a etapa:
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())';
Adicionar uma nova etapa de trabalho
Agora podemos usar
sp_add_jobstep
novamente para adicionar uma nova etapa ao trabalho. 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())';
Isso adiciona uma segunda etapa ao trabalho.
Atualizar o fluxo de trabalho
Se você quiser que o trabalho progrida automaticamente da etapa 1 para a etapa 2, será necessário especificar isso na etapa 1 do trabalho.
A ação padrão para qualquer etapa da tarefa é encerrar a tarefa com sucesso assim que ela for bem-sucedida. Se a etapa falhar, a ação padrão é encerrar com falha.
Portanto, como nosso trabalho está atualmente, o trabalho será concluído assim que a etapa 1 for concluída (sem executar a etapa 2) e o histórico informará que o trabalho foi executado com êxito.
Portanto, precisamos usar
sp_update_jobstep
para atualizar a etapa 1, para que progrida para a etapa 2 assim que for concluída com êxito. Também podemos especificar o que fazer se a etapa 1 falhar.
USE msdb;
EXEC sp_update_jobstep
@job_name = N'SqlAgentTest',
@step_id = 1,
@on_success_action = 3,
@on_fail_action = 3;
Nesse caso, especifiquei que ele deve progredir para a próxima etapa se for bem-sucedido e também se 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. A sintaxe completa de
sp_update_jobstep
fica assim: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' }
Consulte a documentação da Microsoft para
sp_update_jobstep
para uma explicação de cada parâmetro, bem como os valores que cada um aceita.