Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment utiliser les indicateurs de verrouillage pour que deux requêtes parallèles renvoient des résultats qui ne se croisent pas ?

Cela devrait faire l'affaire.

BEGIN TRANSACTION
DECLARE @taskId
SELECT TOP (1) @taskid = TaskId FROM Tasks WITH (UPDLOCK, READPAST) WHERE State = 'ReadyForProcessing' 
UPDATE Tasks SET State = 'Processing' WHERE TaskId = @taskid
COMMIT TRAN