Tôi vừa thử nghiệm điều này trong SQL Server 2008 R2
Tôi đã bắt đầu với:
CREATE PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:10'
SELECT TOP 5 * FROM dbo.UniqueId
GO
Sau đó, tôi đã thực hiện như sau Cửa sổ truy vấn SQL Server 1:
EXEC dbo.Stupid
Cửa sổ truy vấn SQL Server 2, trong khi truy vấn trong Cửa sổ truy vấn 1 đang chạy:
ALTER PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:05'
SELECT TOP 5 * FROM dbo.UniqueId
WHERE ID > 5
GO
EXEC dbo.Stupid
Cửa sổ truy vấn SQL Server 3, trong khi các truy vấn trong Cửa sổ truy vấn 1 và Cửa sổ truy vấn 2 đang chạy:
EXEC dbo.Stupid
Kết quả:
- Cửa sổ truy vấn 1 chạy trong 10 giây (và do đó kết thúc sau cửa sổ 2 và 3) và trả về id 1 - 5
- Cửa sổ truy vấn 2 đã được thay đổi và chạy quy trình trong 5 giây và trả về id 6 - 10
- Cửa sổ truy vấn 3 chạy trong 5 giây và trả về id 6 - 10
Điều gì xảy ra:
- Mã đã thực thi sẽ hoàn tất quá trình chạy trên quy trình như khi chúng được bắt đầu
- Bất kỳ thứ gì bắt đầu chạy sau khi mã được thay đổi sẽ chạy mã mới