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

Crear un trabajo del Agente SQL Server de varios pasos (T-SQL)

En un artículo anterior sobre la creación de un trabajo del Agente SQL Server con T-SQL, demostré cómo crear un trabajo con un solo paso.

En este artículo, le mostraré cómo crear un trabajo con varios pasos.

Ejemplo

Cuando crea un trabajo del Agente SQL Server con T-SQL, necesita usar varios procedimientos almacenados. Esto se debe a que cada parte se trata de forma independiente a las demás. Por ejemplo, el sp_add_job El procedimiento crea el trabajo y el sp_add_jobstep procedimiento crea un paso en ese trabajo.

Cuando crea un trabajo que tiene más de un paso, debe llamar a sp_add_jobstep varias veces, cada llamada define un paso diferente.

Además, si desea que el trabajo progrese a través de los pasos (y no salir del trabajo después del primer paso), deberá especificarlo cuando llame al procedimiento.

Aquí hay un ejemplo que hace todo eso.

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

Ese código crea un trabajo con dos pasos de trabajo. También crea una nueva programación, adjunta ese trabajo a la programación y luego dirige el trabajo al servidor local.

La parte que crea los pasos del trabajo es 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

En la primera llamada, la parte que va @on_success_action = 3 es lo que hace que el trabajo continúe con el siguiente paso.

El valor predeterminado es 1 , lo que significa que el trabajo se cerrará después de completar el primer paso (que es lo que especificamos en el segundo paso). Entonces, si no hubiéramos incluido el @on_success_action = 3 parte en el primer paso, el trabajo se cerraba sin continuar con el siguiente paso.

También puede especificar @on_fail_action , que especifica lo que sucederá si ese paso 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.