L'ho appena testato in SQL Server 2008 R2
Ho iniziato con:
CREATE PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:10'
SELECT TOP 5 * FROM dbo.UniqueId
GO
Ho quindi eseguito la seguente Finestra query SQL Server 1:
EXEC dbo.Stupid
Finestra query di SQL Server 2, mentre era in esecuzione la query nella finestra di query 1:
ALTER PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:05'
SELECT TOP 5 * FROM dbo.UniqueId
WHERE ID > 5
GO
EXEC dbo.Stupid
Finestra query di SQL Server 3, mentre le query nella finestra delle query 1 e nella finestra delle query 2 erano in esecuzione:
EXEC dbo.Stupid
Risultati:
- La finestra della query 1 è stata eseguita in 10 secondi (e quindi è terminata dopo le finestre 2 e 3) e ha restituito gli ID 1 - 5
- La finestra di query 2 ha modificato ed eseguito la procedura in 5 secondi e ha restituito gli ID 6 - 10
- La finestra della query 3 è stata eseguita in 5 secondi e ha restituito gli ID 6 - 10
Cosa succede:
- L'esecuzione del codice già eseguita verrà completata con l'esecuzione della procedura come era quando è stata avviata
- Tutto ciò che viene eseguito dopo che il codice è stato modificato eseguirà il nuovo codice