Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Cosa succede se si altera una procedura memorizzata mentre è in esecuzione?

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