Добрый день!
Помогите разрешить следующую проблему: Есть небольшая табличка (около 10 000 записей), к которой довольно часто обращаются, чтобы получить самую приоритетную запись и поменять её состояние. Был написан примерно такой запрос:
with priorityRecord as
(
select top(1)
from someTable
inner join otherTable on someTable.column1 = otherTable.column1 and
otherTable.column1 = @passedVariable
where state = 0
order by column1
)
update priorityRecord
set state = 1
output deleted.*
на таблице
someTable есть индекс по колонке column1.
При большой нагрузке этот запрос может выдать одну и ту же запись дважды. Как этого избежать? (не хотелось бы лочить всю таблицу)