每年重置自动增量数

时间:2014-01-17 17:23:22

标签: sql-server sql-server-2005

我有一张job_no的表格会自动增加一年中的最后两位数。

示例:在2014年中,job_no将是这样的:140001140002140003并且它将保持增量直到明年,这是2015,它会重置计数,如下所示:150001150002 ...

碰巧我知道如何将日期与数字合并,但我仍然无法弄清楚如何让它每年重置......我将非常感谢你的帮助,并且很高兴能够清楚地了解解释和实例...

3 个答案:

答案 0 :(得分:1)

DECLARE @y INT;
SET @y = YEAR(GETDATE()) % 100; -- or YEAR(@DateOfJob) if you use a variable for that

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

BEGIN TRANSACTION;

DECLARE @i INT;
SELECT @i = MAX(job_no) FROM dbo.TableName WHERE job_no / 1000 = @y;

SET @i = @y * 1000 + 1 + COALESCE(@i % 1000, 0);

-- if job_no is an IDENTITY column, for some reason:
-- SET IDENTITY_INSERT dbo.TableName ON;
INSERT dbo.TableName(job_no, ...) VALUES(@i, ...);
-- if job_no is an IDENTITY column, for some reason:
-- SET IDENTITY_INSERT dbo.TableName OFF;

COMMIT TRANSACTION;

答案 1 :(得分:0)

您只需设置标识插入并插入一个包含您要使用的新起始值的行,然后将从该值开始插入。

虽然在一个字段中有两个数据项,但它有点违反数据库正常形式。

答案 2 :(得分:0)

将SQL代理作业设置为在12月31日午夜运行并运行以下代码片段:

DBCC CHECKIDENT('table_name', RESEED, (YEAR(GETDATE()) % 100) * 10000)

请注意,此方法存在以下问题:

  1. 如果您在某一年内在表格中放置了超过10000条记录,那么您的数字将会结束然后结束并且年份将会出错
  2. 此列中有两种不同类型的信息:标识值和年份。通常最好将这样的信息分开(即,只使用一个标识列,然后再存储日期)
  3. 如果不是现在,你只有一年,而不是将来可能有用的月份或日期