Я объясню свой сценарий на примере.
В моей таблице несколько строк.Я собираю их по одному для обработки.Мне нужно заблокировать строку для обработки.
Пример кода выглядит следующим образом:
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'
Если первая строказаблокирован, я ожидаю получить вторую строку в результате запроса.