0

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

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

有没有一种更简单的方法可以在一个表中重新开始编号(显然不是身份列)?

客户在新年期间关闭,因此在更改年份时不应输入任何数据(对于学校而言)。

4

3 回答 3

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
于 2009-06-30T18:45:17.517 回答
1

有一个类似的问题#761378。. (注:使用的是MySql但原理是一样的)

接受的答案建议使用第二个表来管理当前 ID。

然而,最受欢迎的问题是不要这样做!请注意 HLGEM 在帖子中的回答,以了解为什么不这样做。

于 2009-06-30T18:46:02.523 回答
0

您可以使用此处的“reseed”命令重置起始值。

于 2009-06-30T18:47:24.783 回答