Saltar al contenido

Llamar a un trabajo de SQL Server dentro de otro trabajo

Ten en cuenta que en la informática un error casi siempre tiene diferentes resoluciones, pero nosotros enseñamos la mejor y más óptimo.

Solución:

Opción 1

En Job2, cree un paso de trabajo de tipo Comando TSQL. En el contenido, haga que ejecute el trabajo existente (sp_start_job)

EXECUTE msdb.dbo.sp_start_job 'Job1'

Eso se ejecutará de forma asincrónica, por lo tanto, después de que comience a llamar al procedimiento almacenado, regresará y realizará el siguiente paso en el trabajo. No esperará a que se complete el trabajo iniciado. Si el trabajo llamado falla, no se filtrará de nuevo al trabajo que invocó.

opcion 2

Haga clic con el botón derecho en Job1 y escriba la secuencia de comandos en la nueva ventana de consulta. Repita eso con Job2 y luego enhebre los pasos del trabajo del 1 al 2 según sea necesario. Mucho menos clic que recrear la rueda y, con suerte, menos propenso a errores.

  • Haga clic con el botón derecho en el trabajo cuyos pasos desea agregar y elija “Script Job As->Create to new query window”, en el script resultante busque todas las secciones que tengan este formato
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'', 
  @step_id=1, 
  @cmdexec_success_code=0, 
  @on_success_action=3, 
  @on_success_step_id=0, 
  @on_fail_action=2, 
  @on_fail_step_id=0, 
  @retry_attempts=0, 
  @retry_interval=0, 
  @os_run_priority=0, @subsystem=N'TSQL', 
  @command=N'', 
  @database_name=N'', 
  @flags=0
  • Abra una nueva ventana de consulta y ejecute esto:
DECLARE @jobId BINARY(16)
    SET @jobId = (SELECT job_id FROM msdb.dbo.sysjobs WHERE name = '')

-- Followed by all the msdb.dbo.sp_add_jobstep from the script that scripted out in the earlier step

    EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'', 
      @step_id=1, 
      @cmdexec_success_code=0, 
      @on_success_action=3, 
      @on_success_step_id=0, 
      @on_fail_action=2, 
      @on_fail_step_id=0, 
      @retry_attempts=0, 
      @retry_interval=0, 
      @os_run_priority=0, @subsystem=N'TSQL', 
      @command=N'', 
      @database_name=N'', 
      @flags=0

Desde stackoverflow (mafafu)

WAITFOR DELAY '00:00:02';
while exists (select * from msdb.dbo.sysjobs j 
                inner join msdb.dbo.sysjobactivity a on j.job_id = a.job_id 
                where name = 'Job 1' 
                and stop_execution_date is null and start_execution_date is not null)
begin
    PRINT 'Waiting...'
    WAITFOR DELAY '00:00:02';   
end

Si eres capaz, tienes la habilidad dejar un escrito acerca de qué le añadirías a este post.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Respuestas a preguntas comunes sobre programacion y tecnología