Периодический перезапуск автоматической нумерации для SQL Server

StackOverflow https://stackoverflow.com/questions/1065260

Вопрос

У меня есть требование к программе, над которой я работаю, хранить номера заданий в формате YY-###### с возрастающими числами, начинающимися с 000001 в каждом году, которым предшествуют последние две цифры года.

Единственный метод, который мне удалось придумать, — это создать таблицу CurrentJob и использовать столбец идентификаторов вместе с двумя последними цифрами года и таблицей ArchiveJob, а затем объединить их посредством объединения в представлении.Тогда мне пришлось бы скопировать CurrentJob в ArchiveJob в начале года и усечь CurrentJob.

Есть ли более простой способ перезапустить нумерацию (очевидно, не имея столбца «Идентификация») в одной таблице?

Клиент закрыт на Новый год, поэтому при смене года (для школы) ввода данных быть не должно.

Это было полезно?

Решение

Столбец идентификаторов на сегодняшний день является самым быстрым и наиболее одновременным решением для генерации последовательных чисел внутри SQL Server.Однако не нужно усложнять задачу слишком сильно.Просто создайте одну таблицу для генерации значений идентификаторов и обнулите ее в конце года.Вот краткий пример:

-- Sequence generating table
create table SequenceGenerator (
    ID integer identity(1, 1) primary key clustered
)

-- Generate a new number
insert into SequenceGenerator default values
select @@identity

-- Reset the sequence
truncate table SequenceGenerator
if ident_current('SequenceGenerator') <> 1 begin
    dbcc checkident('SequenceGenerator', reseed, 0)
    dbcc checkident('SequenceGenerator', reseed)
end else begin
    dbcc checkident('SequenceGenerator', reseed, 1)
end

Другие советы

Есть аналогичный вопрос #761378..(Примечание:он использует MySql, но принцип тот же)

В принятом ответе предлагалось использовать вторую таблицу для управления текущим идентификатором.

Однако самым популярным вопросом был не делать этого! Обратите внимание на ответ HLGEM в сообщении, чтобы узнать, почему этого не следует делать.

Вы можете использовать команду «reseed» из здесь для сброса начального значения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top