Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O que acontece se alterar um procedimento armazenado enquanto ele está em execução?


Acabei de testar isso no SQL Server 2008 R2

Comecei com:
CREATE PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:10'
SELECT TOP 5 * FROM dbo.UniqueId
GO

Em seguida, fiz o seguinteJanela de consulta do SQL Server 1:
EXEC dbo.Stupid

Janela de consulta 2 do SQL Server, enquanto a consulta na janela de consulta 1 estava em execução:
ALTER PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:05'
SELECT TOP 5 * FROM dbo.UniqueId
WHERE ID > 5
GO

EXEC dbo.Stupid

Janela de consulta 3 do SQL Server, enquanto as consultas na janela de consulta 1 e na janela de consulta 2 estavam em execução:
EXEC dbo.Stupid

Resultados:
  • A janela de consulta 1 foi executada em 10 segundos (e, portanto, terminou após as janelas 2 e 3) e retornou os IDs 1 - 5
  • A janela de consulta 2 alterou e executou o procedimento em 5 segundos e retornou os IDs 6 - 10
  • A janela de consulta 3 foi executada em 5 segundos e retornou os IDs de 6 a 10

O que acontece:
  • O código já em execução concluirá a execução no procedimento como estava quando foi iniciado
  • Qualquer coisa que comece a ser executada após a alteração do código executará o novo código