Вот идея, как вы можете это реализовать.
Предположим, у вас есть таблица телефонов, как эта. Вы можете добавить LockedTime, чтобы добавить критерий времени.
create table phones (
used bit default 0 not null,
phone varchar(24) not null);
Выполните этот запрос, чтобы извлечь только один телефон, и он не будет возвращен дважды, поскольку он помечен как использованный.
update top(1) phones
set used = 1
output inserted.phone
where used = 0
;
Примечание что он работает на сервере MS SQL. Некоторые другие серверы SQL могут не иметь предложения вывода.
Если вы хотите вернуть номер в пул свободных номеров, вам просто нужно сбросить флаг used
. Например, вы можете сделать это, проверяя временные критерии или любой другой, решая, что телефон становится свободным
update phones set used = 0 where LockedTime < @somedatetime