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.