我需要一个程序,我正在努力将工作号码存储为YY - ######,每年从000001开始递增数字,前面是年份的最后两位数字。
我能想出的唯一方法是创建一个CurrentJob表,并使用一个标识列以及年份的最后两位数字和一个ArchiveJob表,然后通过一个联合在一个视图中将两者结合起来。然后我必须在年初将CurrentJob复制到ArchiveJob并截断CurrentJob。
是否有更简单的方法可以在一个表中重新开始编号(显然没有它是一个标识列)?
客户在新年关闭,因此在年度变化时(学校)不应该输入数据。
答案 0 :(得分:3)
标识列是迄今为止在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
答案 1 :(得分:1)
有一个类似的问题#761378.。 (注意:它使用MySql,但原理是相同的)
接受的答案建议使用第二个表来管理当前ID。
然而最受欢迎的问题是不执行此操作!请注意HLGEM在帖子上的回答,原因为何不这样做。
答案 2 :(得分:0)
您可以使用here中的“reseed”命令重置起始值。