两位数年份作为sql server中的主键

时间:2014-08-12 18:51:38

标签: sql-server date primary-key

我有一个包含这些列的表:

ID int,
d date

现在我需要的是以每年ID唯一的方式定义主键;这意味着在2004年不能有两个相同的ID,但在两个不同的年份可能有两个相同的ID。

像:

insert into myTable values(1, '1-1-2004'), (1, '1-1-2005')       

但不喜欢:

insert into myTable values(1, '3-1-2005'), (1, '1-1-2005')

我试过了:

primary key(ID, datepart(YY, d))

但是我遇到了语法错误。

1 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是,如果可以更改表结构,则为年份部分添加持久计算列,然后为(id,computer_col)添加主键,如下所示:

CREATE TABLE myTable (
    id INT NOT NULL, 
    d DATE NOT NULL, 
    y AS DATEPART(YEAR,d) PERSISTED NOT NULL, 
    PRIMARY KEY(id,y)
    )

我不是说这是一个很好的解决方案,但它应该有效。在插入或检查约束上使用触发器可能会更好。

使用您的测试数据,这将允许第一个插入语句,但不允许第二个插入语句,因为它违反了主键约束。