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

Điều kiện chạy hàng đợi quy trình SQL Server

Chỉnh sửa:

Tôi đã googled để kiểm tra câu trả lời của mình:"Xử lý Hàng đợi Dữ liệu trong SQL Server với READPAST và UPDLOCK". Đã nhiều năm kể từ khi tôi đọc và chơi với giải pháp này.

Bản gốc:

Nếu bạn sử dụng gợi ý READPAST, thì các hàng bị khóa sẽ bị bỏ qua. Bạn đã sử dụng ROWLOCK, vì vậy bạn nên tránh việc khóa báo cáo. Bạn cũng cần UPDLOCK, như tôi đã phát hiện ra.

Vì vậy, quá trình 1 khóa 20 hàng, quá trình 2 sẽ lấy 20 hàng tiếp theo, quá trình 3 lấy hàng 41 đến 60, v.v.

Bản cập nhật cũng có thể được viết như thế này:

UPDATE TOP (20)
    foo
SET
    ProcessorID = @PROCID
FROM
    OrderTable foo WITH (ROWLOCK, READPAST, UPDLOCK)
WHERE
    ProcessorID = 0

Làm mới, tháng 10 năm 2011

Điều này có thể được thực hiện dễ dàng hơn với mệnh đề OUTPUT nếu bạn cần CHỌN và CẬP NHẬT trong một lần.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khắc phục:“Không thể thực hiện ĐĂNG NHẬP SAO LƯU vì không có bản sao lưu cơ sở dữ liệu hiện tại.” trong SQL Server / SQL Edge

  2. SQL Server:Lọc đầu ra của sp_who2

  3. Tôi không thể khởi động trình duyệt SQL Server

  4. Máy chủ SQL bỏ qua trường hợp trong một biểu thức where

  5. Đo lường hiệu suất truy vấn:Chi phí truy vấn kế hoạch thực hiện so với thời gian thực hiện