Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Tabela SELECT e UPDATE para que não haja sobreposição de Threads


Se você quer dizer um bloqueio do tipo de fila segura de simultaneidade, use as dicas ROWLOCK, UPDLOCK, READPAST?

Condição de corrida da fila de processos do 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

No entanto, em uma declaração. algo como
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;