Właśnie przetestowałem to w SQL Server 2008 R2
Zacząłem od:
CREATE PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:10'
SELECT TOP 5 * FROM dbo.UniqueId
GO
Następnie wykonałem następująceOkno zapytań SQL Server 1:
EXEC dbo.Stupid
Okno zapytań SQL Server 2, podczas gdy zapytanie w oknie zapytań 1 było uruchomione:
ALTER PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:05'
SELECT TOP 5 * FROM dbo.UniqueId
WHERE ID > 5
GO
EXEC dbo.Stupid
Okno zapytań SQL Server 3, podczas gdy zapytania w oknie zapytań 1 i oknie zapytań 2 były uruchomione:
EXEC dbo.Stupid
Wyniki:
- Okno zapytania 1 zostało uruchomione w ciągu 10 sekund (a zatem zakończyło się po oknach 2 i 3) i zwróciło identyfikatory 1–5
- Okno zapytania 2 zmieniło i uruchomiło procedurę w ciągu 5 sekund i zwróciło identyfikatory 6–10
- Okno zapytania 3 zostało uruchomione w ciągu 5 sekund i zwróciło identyfikatory 6–10
Co się dzieje:
- Już wykonywany kod zakończy działanie procedury tak, jak przed uruchomieniem
- Wszystko, co zaczyna działać po zmianie kodu, uruchomi nowy kod