Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Điều gì xảy ra nếu thay đổi một thủ tục được lưu trữ trong khi nó đang chạy?

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server - Các ký tự không hợp lệ trong tên tham số

  2. Loại bỏ và tạo lại cơ sở dữ liệu trong Microsoft SQL Server

  3. Bắt đầu với SQL Server 2017 trên Linux trong cổng Azure

  4. 5 tài nguyên tuyệt vời giúp bạn phát huy vai trò giám sát cơ sở dữ liệu của mình

  5. SQL Server tìm kiếm một cột theo tên