Retornar linhas desbloqueadas em uma consulta "selecione as n principais"

Eu preciso ter uma tabela de banco de dados MsSql e outros 8 processos (idênticos) acessando a mesma tabela em paralelo - fazendo um top n selecionado, processando essas n linhas e atualizando uma coluna dessas linhas. O problema é que eu preciso selecionar e processar cada linha apenas uma vez. Isso significa que, se um processo chegar ao banco de dados e selecionar as n linhas principais, quando o segundo processo chegar, ele deverá encontrar essas linhas bloqueadas e selecionar as linhas de n a 2 * n linhas, e assim por diante ...

É possível colocar um bloqueio em algumas linhas quando você as seleciona e quando alguém solicita as n primeiras linhas que estão bloqueadas para retornar as próximas linhas e não esperar pelas que estão bloqueadas? Parece um tiro no escuro, mas ...

Outra coisa que eu estava pensando - talvez não tão elegante, mas pareça simples e seguro, é ter no banco de dados um contador para as instâncias que fizeram as seleções nessa tabela. A primeira instância que vem incrementará o contador e selecionará n superior, a próxima incrementará o contador e selecionará linhas de n * (i-1) para n * i, e assim por diante ...

Isso soa como uma boa idéia? Você tem alguma sugestão melhor? Qualquer pensamento é muito apreciado!

Obrigado pelo seu tempo.

questionAnswers(4)

yourAnswerToTheQuestion