Свежая последовательность SQL в день - PullRequest
1 голос
/ 16 февраля 2009

Что может быть хорошим способом для создания новой последовательности серийных номеров на ежедневной основе в базе данных SQL?

Что-то вроде функции автоинкремента целочисленных столбцов в некоторых системах баз данных.

Я создаю / записываю транзакции, и транзакция идентифицируется парой «дата, серийный номер».

Ответы [ 3 ]

1 голос
/ 16 февраля 2009

Это зависит от того, какая у вас база данных. Если у вас есть доступ к глобальным переменным или генераторам, просто сбрасывайте их каждый день и используйте для заполнения столбца с серийным номером. Если нет, вы можете сохранить значение в таблице и просмотреть его, чтобы заполнить столбец, снова сбрасывая его каждый день.

Не забудьте при необходимости увеличить семена вручную. (Генераторы - это особый вид глобальной переменной, которая может автоматически увеличивать себя, если настроена для этого. Другие переменные и, конечно, запись в таблице этого не делают).

Чтобы сбросить значение, просто установите триггер на вставке, который проверяет, равно ли COUNT(DATE = today) 0. Если это так, сбросьте значение.

1 голос
/ 16 февраля 2009

Как насчет конкретной таблицы только для этой цели?

create table AvailableSerialNumbers (
  AvailableOn datetime primarykey,
  NextAvailableNumber int
)

Вы должны заполнить это заранее, но это довольно просто (убедитесь, что это делается автоматически, а не вручную).

Обратите внимание, что если у вас одновременно создается большое количество записей серийных номеров, логика создания будет узким местом при обновлении записи AvailabilitybleSerialNumbers. Самым простым решением этой проблемы является определение нескольких записей AvailableSerialNumbers в день (скажем, 100 из них) и случайным образом выбирается 1 для обновления. Если использовать этот подход вместо поля «NextAvailableNumber», это должен быть диапазон от / до. Когда диапазон достигает 0, удалите запись диапазона.

0 голосов
/ 16 февраля 2009

Лучший способ - использовать дату как часть числа, например, с 080216001 по 080216999 на сегодня. У вас могут быть несмежные номера?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...