sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server Process Queue Race Condition

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.



  1. SQL Server-markørtyper - Hvad er statiske markører i SQL Server | SQL Server Tutorial / TSQL Tutorial

  2. Sådan sammenlignes null-værdier i MySQL

  3. Sådan opretter du forbindelse til databasen fra Unity

  4. ELLER Operatørkortslutning i SQL Server