Sunting:
Saya mencari di Google untuk memeriksa jawaban saya:"Memproses Antrian Data di SQL Server dengan READPAST dan UPDLOCK". Sudah bertahun-tahun sejak saya membaca dan bermain dengan solusi ini.
Asli:
Jika Anda menggunakan petunjuk READPAST, maka baris yang terkunci akan dilewati. Anda telah menggunakan ROWLOCK sehingga Anda harus menghindari eskalasi penguncian. Anda juga perlu UPDLOCK, seperti yang saya temukan.
Jadi proses 1 mengunci 20 baris, proses 2 akan mengambil 20 baris berikutnya, proses 3 mengambil baris 41 hingga 60, dst
Pembaruan juga dapat ditulis seperti ini:
UPDATE TOP (20)
foo
SET
ProcessorID = @PROCID
FROM
OrderTable foo WITH (ROWLOCK, READPAST, UPDLOCK)
WHERE
ProcessorID = 0
Segarkan, Okt 2011
Ini dapat dilakukan dengan lebih elegan dengan klausa OUTPUT jika Anda memerlukan SELECT dan UPDATE sekaligus.