sql >> Base de Datos >  >> RDS >> Sqlserver

¿Qué sucede si se altera un procedimiento almacenado mientras se está ejecutando?

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