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