Распределение рабочих элементов среди работников с использованием таблицы SQL Server - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть таблица Items, в которой есть столбец BIT InProcessing.

. Есть несколько одновременных рабочих потоков, вытягивающих элементы из таблицы.

Как мне сделатьуверен, что один и тот же элемент не может быть извлечен несколькими работниками, использующими столбец InProcessing?

Нужно ли использовать уровень изоляции SNAPSHOT и проверять наличие ошибок на UPDATE?

МожетЯ ухожу без уровня изоляции SNAPSHOT?(SERIALIZABLE, похоже, не работает в этом случае: насколько я вижу, SELECT не блокирует только выбранные строки, поэтому 2 рабочих могут выбрать одинаковые элементы и увидеть их как

InProcessing= 0

перед их обновлением)

1 Ответ

0 голосов
/ 06 февраля 2019

поместите выбор в транзакцию и сделайте выбор со следующей подсказкой:

begin transaction
select col1, col2 

from table1 with (updlock, holdlock)


where col3='123'
....
commit transaction
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...