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'

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

0 ответов

Другие вопросы по тегам