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

Låser lagrede procedurer tabeller/rækker?

Du kunne få en race tilstand.

Det kan gøres i én erklæring:

  • Du kan tildele i en OPDATERING
  • Låsetipene tillader en anden proces at springe over denne række
  • OUTPUT-sætningen returnerer data til den, der ringer

Prøv dette... (edit:holdlock fjernet)

Update TOP (1) ServerLoginUsers WITH (ROWLOCK, READPAST)
OUTPUT INSERTED.*
SET
   AssignedTo = @User, AssignedToDate = getdate(), SourcePool = @UserPool
WHERE
   AssignedTo is null and [TsServer] = @Server   -- not needed -> and UserName = @ServerUser

Hvis ikke, har du muligvis brug for et separat valg

Update TOP (1) ServerLoginUsers WITH (ROWLOCK, READPAST)
SET
    -- yes, assign in an update
   @ServerUser = UserName,
   -- write
   AssignedTo = @User, AssignedToDate = getdate(), SourcePool = @UserPool
OUTPUT INSERTED.*
WHERE
   AssignedTo is null and [TsServer] = @Server   -- not needed -> and UserName = @ServerUser

SELECT ...

Se venligst dette for mere:SQL Server Process Queue Race Condition




  1. Opsætning af Laravel på en Mac php artisan migreringsfejl:Ingen sådan fil eller mappe

  2. Java-nybegynder har brug for hjælp til databaseforbindelse

  3. Er det nyttigt at starte SQL-forespørgslens WHERE-sætning med 1=1 i Oracle?

  4. Dvaleproblem:@OneToMany-annotering returnerer dubletter