Tengo varios trabajos del Agente SQL Server que deberían ejecutarse secuencialmente. Para mantener una buena visión general de los trabajos que deberían ejecutarse, he creado un trabajo principal que llama a los otros trabajos con una llamada a EXEC msdb.dbo.sp_start_job N'TEST1'
. Los sp_start_job
acabados de forma instantánea (paso de trabajo 1), pero entonces yo quiero que mi trabajo principal que esperar hasta que el trabajo TEST1
haya terminado antes de llamar al siguiente trabajo.
Así que escribí este pequeño script que comienza a ejecutarse justo después de que se llama al trabajo (Paso 2 del trabajo), y obliga al trabajo principal a esperar hasta que el trabajo secundario haya finalizado:
WHILE 1 = 1
BEGIN
WAITFOR DELAY '00:05:00.000';
SELECT *
INTO #jobs
FROM OPENROWSET('SQLNCLI', 'Server=TESTSERVER;Trusted_Connection=yes;',
'EXEC msdb.dbo.sp_help_job @job_name = N''TEST1'',
@execution_status = 0, @job_aspect = N''JOB''');
IF NOT (EXISTS (SELECT top 1 * FROM #jobs))
BEGIN
BREAK
END;
DROP TABLE #jobs;
END;
Esto funciona bastante bien. Pero tuve la sensación de WHILE 1 = 1
que deberían ser posibles soluciones más inteligentes y / o más seguras ( ?).
Tengo curiosidad por las siguientes cosas, espero que me puedan proporcionar algunas ideas:
- ¿Cuáles son los problemas con este enfoque?
- ¿Puedes sugerir una mejor manera de hacer esto?
(Publiqué esta pregunta en StackOverflow primero, porque me estaba enfocando en mejorar el código. Todavía es válido. Pero supongo que la gente aquí en general tendrá cosas más inteligentes que decir sobre por qué no debería intentar hacer esto de la manera en que yo ' lo estoy haciendo ahora, o proporciono buenas alternativas.)
EDITAR (25 de julio)
Aparentemente, no hay demasiados errores con mi script, de acuerdo con el bajo número de respuestas que señalan problemas con él :-) La alternativa a este tipo de scripting parece ser utilizar una herramienta diseñada para estos tareas (como el Administrador de eventos de SQL Sentry o ...), o escribir dicha herramienta usted mismo. No compraremos una herramienta así en mi compañía actual, así que por ahora me quedaré con el guión.