Это не надежно.Потому что подсказки блокировки, которые вы дали, это просто подсказки блокировки.Кроме того, в зависимости от способа индексации таблицы результаты могут сильно отличаться.
Например:
create table test (id int, workitem int, status varchar(50))
insert into test (id, workitem) values (1, 1), (2,2), (3,3)
create index ix_test on test(workitem)
Когда я запускаю это на одном соединении
begin tran
select * from test with (rowlock, xlock, holdlock) where workitem = 1
И я запускаю это на втором соединении:
select top (1) * from test with (rowlock, readpast) order by workitem
Это возвращает:
workitem
--------
3
То же самое, если я делаю:
update top (1) test with (rowlock, readpast)
set status = 'Proc'
output inserted.workitem
Итак, вы можете использоватьэто для одновременного получения того, что вам нужно, но это не надежный способ одновременной обработки в порядке.