Tsql 在自动生成的id(主键)中添加年份前缀

Tsql 在自动生成的id(主键)中添加年份前缀,tsql,primary-key,sql-server-2008-express,Tsql,Primary Key,Sql Server 2008 Express,我希望自动生成我的ID,并希望采用如下格式: 12-0001, 12-0002 12表示2012年,即系统日期的当前年份 我的ID的最后一个记录是12-0999,2013年到来时,我希望我的ID更改年份前缀并重置4位数字,如下所示: 13-0001, 13-0002. 我正在使用asp.NETMVC3和SQLServerExpress2008 有人能告诉我一种方法吗。我有两种选择: (1) 如果要插入数据的表中有一个DATE或DATETIME列,其中包含“正确”的年份,则可以简单地向表中添加

我希望自动生成我的ID,并希望采用如下格式:

12-0001, 12-0002
12表示2012年,即系统日期的当前年份

我的ID的最后一个记录是12-0999,2013年到来时,我希望我的ID更改年份前缀并重置4位数字,如下所示:

13-0001, 13-0002.
我正在使用asp.NETMVC3和SQLServerExpress2008

有人能告诉我一种方法吗。

我有两种选择:

(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
来提供自动递增的数字):

当然,首先还需要将这个新的
PKID
列添加到表中,以便触发器可以在其中存储值:-)


@marc_s我的表中没有日期或日期时间列。我的表名中有一列EMPLOYEEID,它是自动生成的,名、名、出生日期、地址等。@keizune:然后查看我的回答-当我更改系统日期时,查看选项2,例如2014,我插入一个新值,结果将是14-0068,表的最后一条记录是12-0067。我想把它改为14-0001,而不是14-0068。@keizune:那么,你就不能使用
IDENTITY
列了。在SQL Server 2008 R2或更高版本中,要使其正常运行,您需要做大量的手动工作,或者等待SQL Server 2012,它将支持
序列
作为数据库对象(您可以在新的一年中重新设置为从1开始)。谢谢您的建议,但我将坚持使用您提供的代码。这对我的项目来说不是什么大问题。
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
ALTER TABLE dbo.YourTable
ADD PKID VARCHAR(10) NOT NULL DEFAULT ('X')  -- needs to be NOT NULL for Primary Key