Eu tenho uma tabela sys_QueueJob
que armazena dados lógicos da fila.
Achei que bastaria ter uma atualização com retorno... Porém, agora não tenho certeza se isso é 100% seguro.
Como posso ter certeza de que, independentemente de muitas solicitações paralelas, não retornarão o mesmo ID?
UPDATE sys_QueueJob
SET ExecutionStartedOn = GETDATE()
OUTPUT DELETED.Id as Result
WHERE Id = (select top 1 x.Id
from sys_QueueJob x with (rowlock, updlock, readpast)
where x.ExecutionFinishedOn is null
AND (
x.ExecutionStartedOn is null
OR x.ExecutionStartedOn < DATEADD(HOUR, -1, GETDATE())
)
order by x.CreatedOn asc)