tengo un procedimiento almacenado que se denomina de una lista de otros procedimientos almacenados en orden:procedimiento almacenado - forzando orden de ejecución
CREATE PROCEDURE [dbo].[prSuperProc]
AS
BEGIN
EXEC [dbo].[prProc1]
EXEC [dbo].[prProc2]
EXEC [dbo].[prProc3]
--etc
END
Sin embargo, a veces tienen algunos resultados extraños en mis tablas, generados por prProc2, que depende de los resultados generados por prProc1. Si ejecuto prProc1, prProc2, prProc3 manualmente, entonces todo está bien. Parece que cuando ejecuto el procedimiento de nivel superior, ese Proc2 se está ejecutando antes de que Proc1 se haya completado y haya confiado sus resultados a la base de datos. No siempre sale mal, pero parece ir mal cuando Proc1 tiene un tiempo de ejecución largo (en este caso ~ 10s).
¿Cómo modifico prSuperProc de manera que cada procedimiento solo se ejecuta una vez que se ha completado y confirmado el procedimiento anterior? ¿Actas?
Editar para el detalle adicional:
Hay una mesa en mi db que tiene una columna que es nulo por defecto. prProc1 realiza un conjunto de instrucciones de actualización en esta tabla para rellenar esta columna. Luego, prProc2 inserta datos de resumen en una tabla secundaria en función de los valores de esta columna.
Cuando ejecuto el procedimiento súper, lo que estoy viendo (a veces) es que la primera tabla tiene los resultados calculados correctamente por prProc1, pero prProc2 ha generado resultados como si la columna fuera nula. Si luego ejecuto prProc2 manualmente, los datos de resumen se generan correctamente.
Estoy seguro de que el envoltorio proc solamente se ejecuta una vez en cualquier momento - que sólo es utilizado por mí en este momento! No estoy sugiriendo que se estén agotando, solo que las actualizaciones realizadas por Proc1 no se han confirmado por completo cuando se inicia Proc2, y he confirmado esto ejecutándolas manualmente para eliminar el error. – meepmeep
@meepmeep, agregue las sentencias de tipo 'PRINT 'starting prProc1'' y' PRINT' end prProc1'' en todos estos procedimientos (incluido el wrapper) y luego en SSMS ejecute 'EXEC [dbo]. [PrSuperProc]', con parámetros entonces Proc1 tiene un tiempo de ejecución largo (en este caso ~ 10s) para ver qué sucede. –
He introducido esto. Como siempre, el error se niega a repetirse, por lo que voy a dejar esta Q abierta hasta que vuelva a suceder y ver qué resultados. ¡Gracias! – meepmeep