Периодический перезапуск автоматической нумерации для SQL Server
-
21-08-2019 - |
Вопрос
У меня есть требование к программе, над которой я работаю, хранить номера заданий в формате 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» из здесь для сброса начального значения.