Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was passiert, wenn eine gespeicherte Prozedur geändert wird, während sie ausgeführt wird?

Ich habe dies gerade in SQL Server 2008 R2 getestet

Ich begann mit:

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

Ich habe dann das folgende SQL Server-Abfragefenster 1: ausgeführt

EXEC dbo.Stupid

SQL Server-Abfragefenster 2, während Abfrage in Abfragefenster 1 ausgeführt wurde:

ALTER PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:05'
SELECT TOP 5 * FROM dbo.UniqueId
WHERE ID > 5
GO

EXEC dbo.Stupid

SQL Server-Abfragefenster 3, während Abfragen in Abfragefenster 1 und Abfragefenster 2 ausgeführt wurden:

EXEC dbo.Stupid

Ergebnisse:

  • Abfragefenster 1 lief in 10 Sekunden (und wurde daher nach den Fenstern 2 und 3 beendet) und gab die IDs 1 bis 5 zurück
  • Abfragefenster 2 hat die Prozedur geändert und in 5 Sekunden ausgeführt und die IDs 6 bis 10 zurückgegeben
  • Abfragefenster 3 lief in 5 Sekunden und gab die IDs 6–10 zurück

Was passiert:

  • Bereits ausgeführter Code wird die Ausführung der Prozedur so abschließen, wie sie gestartet wurde
  • Alles, was ausgeführt wird, nachdem der Code geändert wurde, führt den neuen Code aus