Jeg har lige testet dette i SQL Server 2008 R2
Jeg startede med:
CREATE PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:10'
SELECT TOP 5 * FROM dbo.UniqueId
GO
Jeg gjorde derefter følgendeSQL Server Query Window 1:
EXEC dbo.Stupid
SQL Server Query Window 2, mens forespørgslen i Query Window 1 kørte:
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 Query Window 3, mens forespørgsler i Query Window 1 og Query Window 2 kørte:
EXEC dbo.Stupid
Resultater:
- Forespørgselsvindue 1 kørte på 10 sekunder (og sluttede derfor efter Windows 2 og 3) og returnerede id'er 1 - 5
- Forespørgselsvindue 2 ændrede og kørte proceduren på 5 sekunder og returnerede id'er 6 - 10
- Forespørgselsvindue 3 kørte på 5 sekunder og returnerede id'er 6 - 10
Hvad sker der:
- Allerede udførelse af kode vil fuldføre kørsel på proceduren, som den var, da den blev startet
- Alt, der begynder at køre, efter at koden er ændret, vil køre den nye kode