Sql server 每年重置自动增量编号
我有一个带有Sql server 每年重置自动增量编号,sql-server,sql-server-2005,Sql Server,Sql Server 2005,我有一个带有job\u no的表格,该表格将自动递增到年度的最后两位数 示例:在2014年,工作编号如下:140001,140002,140003,它将保持增量直到下一年,即2015年,它将重置计数:150001,150002 碰巧我知道如何将日期和数字合并,但我仍然不知道如何让它每年重置。。我将非常感谢您的帮助,并将非常高兴能够清楚地看到解释和示例…您只需设置标识插入,并插入一行,其中包含您要使用的新起始值,然后将从该值开始插入 这有点违背数据库的正常形式,因为一个字段中有两个数据项。设置SQ
job\u no
的表格,该表格将自动递增到年度的最后两位数
示例:在2014年,工作编号如下:140001
,140002
,140003
,它将保持增量直到下一年,即2015年,它将重置计数:150001
,150002
碰巧我知道如何将日期和数字合并,但我仍然不知道如何让它每年重置。。我将非常感谢您的帮助,并将非常高兴能够清楚地看到解释和示例…您只需设置标识插入,并插入一行,其中包含您要使用的新起始值,然后将从该值开始插入
这有点违背数据库的正常形式,因为一个字段中有两个数据项。设置SQL代理作业,在12月31日午夜运行,并运行以下代码片段:
DBCC CHECKIDENT('table_name', RESEED, (YEAR(GETDATE()) % 100) * 10000)
请注意,此方法存在以下问题:
在给定的一年中,分配给第10000个工作的工作编号是什么?实际上,一年中不会有超过三位的数字,但如果我添加了4位数字。问题是我需要将日期与数字一起附加,因为它应该自动插入到表中。我使用这个方法来完成我目前为止所做的:(right(CONVERT([varchar](4),datepart(year,getdate()),(0)),(2))+right('0000'+CONVERT([varchar](4),[Job_No_ID],(0)),(4)))如果Job_No_ID是一个标识列,则插入将失败,除非您将identity_insert dbo.table设置为ON(然后在完成时将其设置为off)@JeffHornby True,我假设它不是一个标识列。@AaronBertrand,谢谢你的帮助,但使用你的查询,在我插入的每一行中都不断重复“否”。@user3207594抱歉,有几个小错误。谢谢你的帮助,我按照你的建议完成了。
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;