SQL SERVER - ТОП ОБНОВЛЕНИЯ с ЗАКАЗАТЬ ПО и подсказками: ROWLOCK, READPAST, XLOCK - PullRequest
0 голосов
/ 26 марта 2020

Давайте рассмотрим таблицу [queue], которая представляет очередь элементов, которые должны обрабатываться службой. Основная проблема в том, что у нас есть несколько экземпляров сервиса. Проблемы:

  1. один элемент должен быть выбран только одной службой.
  2. мы не хотим блокировать другие запросы в этой очереди.
  3. служба должна забрать самый старый элемент из очереди.

    update TOP(1) [queue] WITH (XLOCK, READPAST, ROWLOCK) 
    SET status = 2/*proccesing*/ 
    OUTPUT INSERTED.id
    where status = 1
    

Работает, но достигаются только 1,2 цели. Запрещено использовать заказ по. Как добавить ORDER BY?

1 Ответ

2 голосов
/ 26 марта 2020
;With CTE as
(
    select Top 1 *  from [queue]  WITH (XLOCK, READPAST, ROWLOCK) order by YourColumnName
     --you can your own cond...and you can select Top number of rows..here i'm selecting only 1 row
)

Update CTE set status = 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...