Давайте рассмотрим таблицу [queue]
, которая представляет очередь элементов, которые должны обрабатываться службой. Основная проблема в том, что у нас есть несколько экземпляров сервиса. Проблемы:
- один элемент должен быть выбран только одной службой.
- мы не хотим блокировать другие запросы в этой очереди.
служба должна забрать самый старый элемент из очереди.
update TOP(1) [queue] WITH (XLOCK, READPAST, ROWLOCK)
SET status = 2/*proccesing*/
OUTPUT INSERTED.id
where status = 1
Работает, но достигаются только 1,2 цели. Запрещено использовать заказ по. Как добавить ORDER BY
?