У меня есть таблица SQL Server, которую я использую в качестве очереди, и она обрабатывается многопоточным (и вскоре станет многосерверным) приложением. Я хотел бы, чтобы процесс мог запросить следующую строку из очереди, пометив ее как «в процессе», без возможности того, что несколько потоков (или несколько серверов) будут запрашивать одну и ту же строку одновременно.
Есть ли способ обновить флаг в строке и получить эту строку одновременно? Я хочу что-то вроде этого psuedocode, но в идеале, не блокируя всю таблицу:
Block the table to prevent others from reading
Grab the next ID in the queue
Update the row of that item with a "claimed" flag (or whatever)
Release the lock and let other threads repeat the process
Какой лучший способ использовать T-SQL для этого? Я помню, как однажды видел оператор, который удалял бы строки DELETE и, в то же время, помещал строки DELETED во временную таблицу, чтобы вы могли делать с ними что-то еще, но я не могу найти его сейчас. 1006 *