Вернуть незаблокированные строки в запросе «выберите топ n»

Мне нужна таблица базы данных MsSql и еще 8 (идентичных) процессов, которые параллельно обращаются к одной и той же таблице - выбирают top n, обрабатывают эти n строк и обновляют столбец этих строк. Проблема в том, что мне нужно выбрать и обработать каждую строку только один раз. Это означает, что если один процесс попадет в базу данных и выберет верхние n строк, то при появлении второго процесса он должен найти эти строки заблокированными и выбрать строки от n до 2 * n строк и т. Д.

Можно ли поставить блокировку на некоторые строки, когда вы выбираете их, и когда кто-то запрашивает верхние n строк, которые заблокированы, чтобы вернуть следующие строки, а не ждать заблокированных? Похоже на длинный выстрел, но ...

Еще одна вещь, о которой я подумал - может быть, не такая элегантная, но звучит просто и безопасно, - иметь в базе данных счетчик экземпляров, которые делали выборки в этой таблице. Первый поступающий экземпляр увеличивает счетчик и выбирает top n, следующий - увеличивает счетчик и выбирает строки от n * (i-1) до n * i и так далее ...

Это звучит как хорошая идея? У вас есть предложения получше? Любая мысль высоко ценится!

Спасибо за ваше время.

Ответы на вопрос(4)

Ваш ответ на вопрос