Если вы выбираете работу транзакционным способом, ее может забрать только один сервер:
set transaction isolation level repeatable read
update top 1 tbl
set ProcessingOnServer = HOST_NAME()
from YourWorkTable tbl
where ProcessingOnServer is null
and Done = 0
Теперь вы можете выбирать детали, зная, что рабочий элемент вам назначен безопасно:
select *
from YourWorkTable tbl
where ProcessingOnServer = HOST_NAME()
and Done = 0
Функция host_name()
возвращает имя клиента, но если вы считаете, что это безопаснее, вы можете передать имя хоста из клиентского приложения.
Обычно мы добавляем метку времени, чтобы вы могли проверитьсерверы, которые слишком долго обрабатывали элемент.