Rediger:
Jeg googlede for at tjekke mit svar:"Behandling af datakøer i SQL Server med READPAST og UPDLOCK". Det er år siden, jeg læste om og legede med denne løsning.
Original:
Hvis du bruger READPAST-tip, springes låste rækker over. Du har brugt ROWLOCK, så du bør undgå låseeskalering. Du har også brug for UPDLOCK, som jeg fandt ud af.
Så proces 1 låser 20 rækker, proces 2 vil tage de næste 20, proces 3 tager rækker 41 til 60 osv.
Opdateringen kan også skrives sådan her:
UPDATE TOP (20)
foo
SET
ProcessorID = @PROCID
FROM
OrderTable foo WITH (ROWLOCK, READPAST, UPDLOCK)
WHERE
ProcessorID = 0
Opdater, okt 2011
Dette kan gøres mere elegant med OUTPUT-klausulen, hvis du har brug for en SELECT og en UPDATE på én gang.