2014-01-17 155 views
0

我有一個表job_no與一年中的最後兩位數自動遞增。每年重置自動增量編號

例子:在今年2014job_no會是這樣:140001,,140003,它會不斷遞增,直到明年是2015,它會重置這樣計數:150001150002 ...

它發生了,我知道如何合併日期與數字,但我仍然無法弄清楚如何讓它重置一年..我會非常感謝您的幫助,並會很高興爲清晰的解釋和例子的看法。 ..

+2

在給定年份中爲第10,000個工作分配了哪個工作號? –

+0

實際上,一年內不會超過三位數字,但如果我添加了4位數字。 問題是我需要附加數字的日期,因爲它應該自動插入到表中。 (right)(CONVERT([varchar](4),datepart(year,getdate()),(0)),(2))+ right(0) '0000'+ CONVERT([varchar](4),[Job_No_ID],(0)),(4))) – OJazem

回答

0

設置SQL代理作業在午夜12月31日運行,運行下面的代碼片段:

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

注意,有這種方法存在以下問題:

  1. 如果您在給定年份中的表格中記錄的記錄超過10000條,那麼您的數字將會越過結尾,年份將會出錯
  2. 此列中有兩種不同類型的信息:身份值和年份。通常情況下,將信息劃分出來(例如,只使用標識列,然後存儲日期)
  3. 您只有年份,而不是在將來可能有用的月份或日期, t現在
+0

感謝您的幫助,我遵循了您的建議並完成了。 – OJazem

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; 
+0

如果job_no_id是標識列,那麼這將會失敗,除非您將IDENTITY_INSERT dbo.table設置爲ON(並且在完成時將其設置爲關閉) –

+0

@JeffHornby確實,我認爲它不是IDENTITY列。 –

+0

@AaronBertrand,感謝您的幫助,但使用您的查詢,不斷重複我插入的每一行中的job_no。 – OJazem