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