sql >> Database >  >> RDS >> Sqlserver

Vergrendelen opgeslagen procedures tabellen/rijen?

Je zou een raceconditie kunnen krijgen.

Het kan in één verklaring worden gedaan:

  • U kunt toewijzen in een UPDATE
  • Met de vergrendelingshints kan een ander proces overslaan deze rij
  • De OUTPUT-component retourneert gegevens naar de beller

Probeer dit... (edit:holdlock verwijderd)

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

Zo niet, dan heeft u mogelijk een aparte selectie nodig

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 ...

Zie dit voor meer informatie:SQL Server Process Queue Race Condition




  1. Boto3 gebruiken om te communiceren met amazon Aurora op RDS

  2. Oracle CREATE TABLE Commando in PL/SQL met 10 voorbeelden

  3. Waarom kan ik mijn door de gebruiker gedefinieerde Oracle-type niet op deze manier gebruiken?

  4. mysql systeemvariabele table_type werkt niet