Есть приложение в котором есть DataGrid в котором есть заявки. За этим приложением работают несколько юзеров. И если они в один и тот же момент хотят взять в работу одну и ту же заявку, чтоб первому он дал эту заявку, а второму написал что эту заявку уже забрали. Причем кол-во пользователей свыше 100... Как можно это грамотно реализовать в SQL.
DECLARE @UserIdAimCheck int
SET @UserIdAimCheck = (SELECT TOP 1 UserIdAim FROM History WHERE HistoryId=@historyId)
IF @UserIdAimCheck is null
BEGIN
UPDATE History SET UserIdAim=@userId
WHERE History.HistoryId=@historyId
SELECT 'Заявка успешно взята вами в работу';
END
ELSE
BEGIN
SELECT 'Данная заявка уже в работе, обновите таблицу!';
END
Если для не-взятой заявки соотв. поле (UserIdAim?) содержит NULL (или ноль), то
UPDATE History
SET UserIdAim=@userId
WHERE History.HistoryId=@historyId
AND UserIdAim IS NULL /* или =0 */
и затем тупо контроль либо количества обновлённых записей (не ноль - получилось, ноль - кто-то успел раньше), либо SELECT по @historyId и @userId и проверка, что возвращается ненулевое количество записей.
В обоих случаях, получив ноль, сообщаем, что заявку слямзили буквально из-под носа. А обновить в таком случае можно и автоматически...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Существует ли какая-либо практическая разница между двумя способами задания курсора?
Имеются три div блокаВыровнял по линии их с помощью display: inline-block
Подскажите, пожалуйста, в чем проблема (или я что-то не понимаю)Есть SVG