Хотелось бы, чтобы в SQL Server была эта функция. Это облегчит многие вещи.
Вот как я справился с этим.
Создайте таблицу с именем tblIdentities. В этой таблице поместите строку с вашими минимальными и максимальными значениями и частотой сброса порядкового номера. Также введите имя новой таблицы (назовите ее tblMySeqNum). Это значительно упрощает добавление новых генераторов порядковых номеров.
tblMySeqNum имеет два столбца. Идентификатор (который представляет собой идентификатор int) и InsertDate (который является столбцом даты и времени со значением по умолчанию GetDate ()).
Когда вам нужен новый последовательный номер, вызовите sproc, который вставляется в эту таблицу, и используйте SCOPE_IDENTITY () для создания идентификатора. Удостоверьтесь, что вы не превысили максимум в tblIdentities. Если у вас есть, то верните ошибку. Если нет, верните свой порядковый номер.
Теперь для сброса и очистки. Имейте задание, которое выполняется так регулярно, как необходимо, чтобы проверять все таблицы, перечисленные в tblIdentites (пока только одну), чтобы увидеть, нужно ли их сбрасывать. Если они достигли значения или времени сброса, вызовите DBCC IDENT RESEED для имени таблицы, указанной в строке (в этом примере tblMySeqNum). Это также хорошее время, чтобы очистить лишние строки, которые вам не нужны в этой таблице.
НЕ выполняйте уборку или повторное посев в вашем звездочке, который получает личность. Если вы это сделаете, то ваш генератор порядковых номеров вообще не будет хорошо масштабироваться.
Как я уже сказал, это значительно упростит эту функцию в SQL Server, но я обнаружил, что эта работа обходится довольно хорошо.
Vaccano