定期重新启动SQL Server的自动编号

时间:2009-06-30 18:37:09

标签: sql-server-2005 tsql auto-increment

我需要一个程序,我正在努力将工作号码存储为YY - ######,每年从000001开始递增数字,前面是年份的最后两位数字。

我能想出的唯一方法是创建一个CurrentJob表,并使用一个标识列以及年份的最后两位数字和一个ArchiveJob表,然后通过一个联合在一个视图中将两者结合起来。然后我必须在年初将CurrentJob复制到ArchiveJob并截断CurrentJob。

是否有更简单的方法可以在一个表中重新开始编号(显然没有它是一个标识列)?

客户在新年关闭,因此在年度变化时(学校)不应该输入数据。

3 个答案:

答案 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”命令重置起始值。