Sql Server: применить блокировку строк, исключая уже заблокированные строки - PullRequest
0 голосов
/ 04 февраля 2019

Я объясню свой сценарий на примере.

В моей таблице несколько строк.Я собираю их по одному для обработки.Мне нужно заблокировать строку для обработки.

Пример кода выглядит следующим образом:

select top 1 * into #open_order from orders with (xlock) 
where status = 'open' order by order_time;

РЕДАКТИРОВАТЬ: добавлен заказ по предложению в запросе.

Мое требование - выполнить это в параллельных соединениях.Моя проблема в том, что я не могу запустить этот код на нескольких соединениях параллельно.Второй ожидает, пока первый не завершит транзакцию.

Есть ли способ исключить уже заблокированные строки из этого запроса на выборку?

Я встречал with(readpast).Но я не знаю, можно ли использовать его вместе или нет.

РЕДАКТИРОВАТЬ: выборка данных и ожидание.

Данные таблицы заказов:

id, order_time, status, remark 
1, 2019-01-01 00:00:01, 'open', 'Sample 1' 
2, 2019-01-02 00:00:01, 'open', 'Sample 2' 
3, 2019-01-03 00:00:01, 'open', 'Sample 1'

Если первая строказаблокирован, я ожидаю получить вторую строку в результате запроса.

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