T- SQL устанавливает вращающийся флаг (True / False) в записях с помощью Stored Proc - PullRequest
0 голосов
/ 01 февраля 2020

Я могу сделать это, используя несколько команд в C# для создаваемого приложения, но предпочитаю хранимый pro c для устранения проблем с задержкой / блокировками и т. Д. c. (надеюсь):

У меня есть таблица из 10 расширений (важные поля): SortOrder, Extension, IsUsed

Первая запись будет установлена ​​в IsUsed = true

При вызове сохраненного про c мне нужно, чтобы значение IsUsed для СЛЕДУЮЩЕЙ записи в порядке сортировки было установлено в значение true, а для текущей записи в значение true установлено значение false. Когда я нажму на последнюю запись, вернусь к первой записи.

Вариант использования: Мне нужно повернуть через банк используемых номеров. Несколько человек используют приложение, поэтому не могут использовать повторно. номер в течение последних 4 минут (банка 10 будет достаточно, но мы можем продлить при необходимости). Когда пользователь запрашивает номер, он получает следующую выгоду. Я могу построить таблицу так, как это необходимо, поэтому приветствуются любые варианты использования. Мне нужно установить флаг в true на 1-й записи, когда вызывается pro c. Все остальные записи должны быть ложными.

Я видел это, что представляет интерес, но не совсем отвечает:

Получить "следующую" строку из SQL База данных сервера и пометить его в одной транзакции

1 Ответ

0 голосов
/ 01 февраля 2020

Если все, что вы используете для этого, это вернуть число для идентификации сеанса, я бы предложил отказаться от всей идеи таблицы и позволить SQL Серверу сделать всю работу за вас.

Вы можете создать объект SEQUENCE, который будет циклически повторять и возвращать следующее значение для вас, без необходимости писать какой-либо код или поддерживать какие-либо таблицы.

CREATE SEQUENCE dbo.Extension 
    AS integer
    START WITH 5  
    INCREMENT BY 5
    MINVALUE 5 
    MAXVALUE 50
    CYCLE;  

Это вернет номер 5 при первом вызове, до номера 50 на номер 10, а затем начнется снова. Вы можете настроить числа в коде так, чтобы более или менее делать то, что вы хотите, однако.

Получите следующее значение следующим образом:

SELECT NEXT VALUE FOR dbo.Extension;

И когда / если вам нужно расширить диапазон:

ALTER SEQUENCE dbo.Extension
     MAXVALUE 100;

Поэкспериментируйте с идеей демонстрация Rextester .

Редактировать : в свете комментариев выше и ниже Я бы все-таки придерживался SEQUENCE, я думаю.

Каждый раз, когда ваш код вызывает таблицу для расширения, используйте запрос в следующем формате:

SELECT 
  Extension
FROM 
  ExtTable
WHERE
  SortOrder = NEXT VALUE FOR dbo.Extension;

Функционально это должно делать то, что вам нужно, опять же, без кода для написания или поддержки.

...