sql >> Base de Datos >  >> RDS >> Sqlserver

Agregar un paso de trabajo a un trabajo existente del Agente SQL Server (T-SQL)

Cuando crea un trabajo del Agente SQL Server con T-SQL, usa el sp_add_jobstep procedimiento almacenado para agregar cada paso de trabajo.

Si alguna vez necesita agregar un nuevo paso a ese trabajo, puede usar sp_add_jobstep una vez más para agregar el nuevo paso de trabajo.

Pero es posible que también deba modificar el paso existente, dependiendo de cómo le gustaría que el trabajo progrese a través de los pasos.

Ejemplo

En este ejemplo, creamos un trabajo con un paso de trabajo, luego usamos sp_add_jobstep para agregar un segundo paso a ese trabajo. Luego usamos sp_update_jobstep para actualizar el primer paso de trabajo para que progrese al segundo paso de trabajo tan pronto como se complete.

Crear el trabajo

Primero, cree el trabajo con un solo paso:

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

Para que quede claro, la siguiente parte fue la parte que agregó el paso:

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

Agregar un nuevo paso de trabajo

Ahora podemos usar sp_add_jobstep nuevamente para agregar un nuevo paso al trabajo.

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

Esto agrega un segundo paso al trabajo.

Actualizar el flujo de trabajo

Si desea que el trabajo progrese automáticamente del paso 1 al paso 2, deberá especificarlo en el paso 1 del trabajo.

La acción predeterminada para cualquier paso del trabajo es salir del trabajo con éxito tan pronto como lo haga. Si el paso falla, la acción predeterminada es salir con falla.

Entonces, tal como está nuestro trabajo actualmente, el trabajo finalizará tan pronto como se complete el paso 1 (sin ejecutar el paso 2), y el historial informará que el trabajo se ejecutó correctamente.

Por lo tanto, necesitamos usar sp_update_jobstep para actualizar el paso 1, de modo que progrese al paso 2 una vez que se complete con éxito.

También podemos especificar qué hacer si falla el paso 1.

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

En este caso, especifiqué que debería avanzar al siguiente paso tanto si tiene éxito como si falla.

Los valores que puede proporcionar a @on_success_action y @on_fail_action son los siguientes:

1 Salir con éxito. Este es el valor predeterminado para @on_success_action .
2 Salir con error. Este es el valor predeterminado para @on_fail_action .
3 Ir al siguiente paso.
4 Ir al paso (ID). Aquí es donde proporciona la ID de un paso para el que desea que progrese el trabajo.

Ver los pasos del trabajo

Puedes usar sp_help_job para obtener información sobre los trabajos del Agente SQL Server en el sistema.

Puede usarlo con o sin parámetros, pero para obtener los detalles del paso del trabajo, debe proporcionar el nombre o ID del trabajo.

Podemos usarlo para ver los dos pasos del trabajo que creamos para el trabajo.

Me gusta esto:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

Así es como se ve el resultado al ejecutarlo en SSMS:

Aquí hay un ejemplo del código cuando se usa la ID:

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

Al usar la ID, puede omitir el nombre del parámetro si lo desea.

Ejemplo:

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

También puede usar sp_help_jobstep de la misma manera para devolver solo los pasos del trabajo (sin toda la otra información sobre el trabajo). Esto acepta el nombre o ID del trabajo, así como un nombre o ID de paso opcional.

Sintaxis completa

La sintaxis completa de sp_add_jobstep va así:

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 la documentación de Microsoft para sp_add_jobstep para una explicación de cada parámetro, así como los valores que acepta cada uno.

La sintaxis completa de sp_update_jobstep va así:

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 la documentación de Microsoft para sp_update_jobstep para una explicación de cada parámetro, así como los valores que acepta cada uno.