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