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

SELECT e UPDATE tabella in modo che non vi siano sovrapposizioni di thread

Se intendi un blocco del tipo di coda sicuro per la concorrenza, utilizza i suggerimenti ROWLOCK, UPDLOCK, READPAST?

Condizione di competizione della coda di processo di SQL Server

BEGIN TRAN

SELECT TOP 1 @QueryID = [ID] from Table WITH (ROWLOCK, UPDLOCK, READPAST)
UPDATE Table SET [Read] = 1 WHERE [ID] = @QueryID 

COMMIT TRAN -- TRAM

Tuttavia, in una dichiarazione. qualcosa come

WITH T AS
(
    --ORDER BY with TOP , or perhaps MIN is better?
    SELECT TOP 1 [Read], [ID] from Table
    WITH (ROWLOCK, UPDLOCK, READPAST) ORDER BY [Read]
)
UPDATE
    T
SET
    [Read] = 1;