我想被自動生成我的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.
任何人都可以告訴我一種方法,我可以做到這一點。
我想被自動生成我的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.
任何人都可以告訴我一種方法,我可以做到這一點。
我看到兩個選項:
(1)如果你的表,你將數據插入到有有「權利」今年它DATE
或DATETIME
欄,你可以簡單地增加一個堅持,計算列到你的表 - 這樣的:
ALTER TABLE dbo.YourTable
ADD PKID AS RIGHT(CAST(YEAR(DateColumn) AS CHAR(4)), 2) + '-' +
RIGHT('00000' + CAST(ID AS VARCHAR(5)), 5) PERSISTED
假設ID
是INT 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
@marc_s我沒有DATE或DATET IME列在我的表中。我的表名有自動生成的EMPLOYEEID列,FIRSTNAME,LASTNAME,BIRTHDATE,ADDRESS等。 – keizune
@keizune:然後查看我的迴應 - 查看選項號。 2 –