2012-01-23 46 views
0

我想被自動生成我的ID和希望的格式是這樣的:添加年前綴中自動生成的ID是主鍵

12-0001, 12-0002 

12表示2012年是系統日期的本年度。

而我的ID最後一個記錄是12-0999,當談到2013我想我的ID改變年前綴和重置4位這樣的:

13-0001, 13-0002. 

我使用asp.net的MVC 3和sql server express 2008.

任何人都可以告訴我一種方法,我可以做到這一點。

+0

@marc_s我沒有DATE或DATET IME列在我的表中。我的表名有自動生成的EMPLOYEEID列,FIRSTNAME,LASTNAME,BIRTHDATE,ADDRESS等。 – keizune

+0

@keizune:然後查看我的迴應 - 查看選項號。 2 –

回答

2

我看到兩個選項:

(1)如果你的表,你將數據插入到有有「權利」今年它DATEDATETIME欄,你可以簡單地增加一個堅持,計算列到你的表 - 這樣的:

ALTER TABLE dbo.YourTable 
ADD PKID AS RIGHT(CAST(YEAR(DateColumn) AS CHAR(4)), 2) + '-' + 
       RIGHT('00000' + CAST(ID AS VARCHAR(5)), 5) PERSISTED 

假設IDINT IDENTITY列自動生成序列號,你想打電話給你的新列PKID(根據需要進行更改)。

由於這是一個持久計算列,它被計算一次 - 行被插入時 - 它可以被索引並用作主鍵。 (2)如果你的表中沒有類似日期列的東西,那麼唯一的選擇是在該表上有一個AFTER INSERT觸發器,它可以做類似這樣的事情(再次說明:假設你有一列ID INT IDENTITY提供自動遞增的數字):

CREATE TRIGGER trgInsert ON dbo.YourTable 
AFTER INSERT 
AS 
BEGIN 
    DECLARE @YearPrefix CHAR(2) 
    SET @YearPrefix = RIGHT(CAST(YEAR(GETDATE()) AS CHAR(4)), 2) 

    UPDATE dbo.YourTable 
    SET OtherID = @YearPrefix + '-' + RIGHT('00000' + CAST(i.EmployeeID AS VARCHAR(5)), 5) 
    FROM INSERTED i 
    WHERE dbo.YourTable.EmployeeID = i.EmployeeID 
END 

和當然,首先你需要這個新PKID列添加到您的表,也使得觸發可以在其中存儲值:-)

ALTER TABLE dbo.YourTable 
ADD PKID VARCHAR(10) NOT NULL DEFAULT ('X') -- needs to be NOT NULL for Primary Key 
+0

當我更改我的系統日期,例如2014年,我插入一個新的值,它將導致到14-0068,表的最後一個記錄是12-0067。我想把它變成14-0001而不是14-0068。 – keizune

+0

@keizune:那麼,在這種情況下,您不能使用'IDENTITY'列。在SQL Server 2008 R2或更舊的版本中,您必須執行大量手動工作才能使其正常運行 - 或者等待支持「SEQUENCE」作爲數據庫對象的SQL Server ** 2012 **(您可以在新的一年中重新開始從1開始)。 –

+0

感謝您的建議,但我會堅持您提供的代碼。這對我的項目不會是一個大問題。 – keizune