Siempre pensé que actualizar un procedimiento almacenado era algo que podía hacer mientras los usuarios usaban activamente el sistema.
Pero actualmente estoy probando una actualización de un procedimiento almacenado y mientras se ejecutaba una llamada de larga ejecución al sproc (faltaban más de 4 minutos para la llamada), actualicé el sproc. (Estaba planeando probar un plan de consulta diferente en una ventana separada).
Cuando volví a la larga, tuve este error:
The definition of object 'MySprocName' has changed since it was compiled.
Este error parece indicar que cualquier sproc que se esté ejecutando activamente fallará si se actualiza la definición de ese sproc. (Pensé que una vez que un sproc comenzara a funcionar, usaría ese plan para el resto de la ejecución a pesar de los cambios en la definición).
¿Es esto cierto? ¿Necesito tener tiempos de inactividad para actualizar la definición de un sproc?
WITH RECOMPILE
? Esta es una opción de nivel de procedimiento para configurar el procedimiento para que se vuelva a compilar después de cada ejecución. Esto significa que el plan siempre se recompilará y evitará que los planes en caché se reutilicen.