我希望我的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 :(得分:2)
我看到两个选项:
(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