Jag har precis testat detta i SQL Server 2008 R2
Jag började med:
CREATE PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:10'
SELECT TOP 5 * FROM dbo.UniqueId
GO
Jag gjorde sedan följandeSQL Server Query Window 1:
EXEC dbo.Stupid
SQL Server Query Window 2, medan frågan i Query Window 1 kördes:
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, medan frågor i Query Window 1 och Query Window 2 kördes:
EXEC dbo.Stupid
Resultat:
- Frågefönster 1 kördes på 10 sekunder (och slutfördes därför efter fönster 2 och 3) och returnerade id 1 - 5
- Frågefönster 2 ändrade och körde proceduren på 5 sekunder och returnerade id 6 - 10
- Frågefönster 3 kördes på 5 sekunder och returnerade id 6 - 10
Vad händer:
- Redan exekvering av kod kommer att slutföra körningen på proceduren som den var när den startades
- Allt som börjar köras efter att koden har ändrats kommer att köra den nya koden