我有一個表job_no
與一年中的最後兩位數自動遞增。每年重置自動增量編號
例子:在今年2014
的job_no
會是這樣:140001
,,140003
,它會不斷遞增,直到明年是2015
,它會重置這樣計數:150001
,150002
...
它發生了,我知道如何合併日期與數字,但我仍然無法弄清楚如何讓它重置一年..我會非常感謝您的幫助,並會很高興爲清晰的解釋和例子的看法。 ..
我有一個表job_no
與一年中的最後兩位數自動遞增。每年重置自動增量編號
例子:在今年2014
的job_no
會是這樣:140001
,,140003
,它會不斷遞增,直到明年是2015
,它會重置這樣計數:150001
,150002
...
它發生了,我知道如何合併日期與數字,但我仍然無法弄清楚如何讓它重置一年..我會非常感謝您的幫助,並會很高興爲清晰的解釋和例子的看法。 ..
設置SQL代理作業在午夜12月31日運行,運行下面的代碼片段:
DBCC CHECKIDENT('table_name', RESEED, (YEAR(GETDATE()) % 100) * 10000)
注意,有這種方法存在以下問題:
感謝您的幫助,我遵循了您的建議並完成了。 – OJazem
你只需要設置標識插入並插入一個用你想要使用的新的起始值排它,然後這將開始從該值插入。
它有點違背數據庫的正常形式,但你有兩個數據項在一個字段。
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;
如果job_no_id是標識列,那麼這將會失敗,除非您將IDENTITY_INSERT dbo.table設置爲ON(並且在完成時將其設置爲關閉) –
@JeffHornby確實,我認爲它不是IDENTITY列。 –
@AaronBertrand,感謝您的幫助,但使用您的查詢,不斷重複我插入的每一行中的job_no。 – OJazem
在給定年份中爲第10,000個工作分配了哪個工作號? –
實際上,一年內不會超過三位數字,但如果我添加了4位數字。 問題是我需要附加數字的日期,因爲它應該自動插入到表中。 (right)(CONVERT([varchar](4),datepart(year,getdate()),(0)),(2))+ right(0) '0000'+ CONVERT([varchar](4),[Job_No_ID],(0)),(4))) – OJazem