Acabo de probar esto en SQL Server 2008 R2
Empecé con:
CREATE PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:10'
SELECT TOP 5 * FROM dbo.UniqueId
GO
Luego hice lo siguiente Ventana de consulta de SQL Server 1:
EXEC dbo.Stupid
Ventana de consulta 2 de SQL Server, mientras se ejecutaba la consulta en la Ventana de consulta 1:
ALTER PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:05'
SELECT TOP 5 * FROM dbo.UniqueId
WHERE ID > 5
GO
EXEC dbo.Stupid
Ventana de consulta 3 de SQL Server, mientras se ejecutaban consultas en Ventana de consulta 1 y Ventana de consulta 2:
EXEC dbo.Stupid
Resultados:
- La ventana de consulta 1 se ejecutó en 10 segundos (y, por lo tanto, finalizó después de las ventanas 2 y 3) y devolvió los ID 1 - 5
- La ventana de consulta 2 se modificó y ejecutó el procedimiento en 5 segundos, y devolvió los ID 6 - 10
- La ventana de consulta 3 se ejecutó en 5 segundos y devolvió los ID 6 - 10
Qué sucede:
- El código que ya se está ejecutando completará la ejecución del procedimiento tal como estaba cuando se iniciaron
- Todo lo que comience a ejecutarse después de modificar el código ejecutará el nuevo código