Току-що тествах това в SQL Server 2008 R2
Започнах с:
CREATE PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:10'
SELECT TOP 5 * FROM dbo.UniqueId
GO
След това направих следнотоПрозорец на заявка на SQL Server 1:
EXEC dbo.Stupid
Прозорец на заявка 2 на SQL Server, докато заявката в прозорец на заявка 1 се изпълняваше:
ALTER PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:05'
SELECT TOP 5 * FROM dbo.UniqueId
WHERE ID > 5
GO
EXEC dbo.Stupid
Прозорец на заявка 3 на SQL Server, докато се изпълняваха заявки в прозорец на заявка 1 и прозорец на заявка 2:
EXEC dbo.Stupid
Резултати:
- Прозорец на заявката 1 се изпълни за 10 секунди (и следователно завърши след прозорци 2 и 3) и върна идентификатори 1 - 5
- Прозорецът на заявката 2 промени и изпълни процедурата за 5 секунди и върна идентификатори 6 - 10
- Прозорецът на заявката 3 се изпълни за 5 секунди и върна идентификатори 6 - 10
Какво се случва:
- Вече изпълняваният код ще завърши изпълнението на процедурата, както беше при стартирането им
- Всичко, което започне да се изпълнява след промяна на кода, ще изпълни новия код