我有一个包含这些列的表:
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))
但是我遇到了语法错误。
答案 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)
)
我不是说这是一个很好的解决方案,但它应该有效。在插入或检查约束上使用触发器可能会更好。
使用您的测试数据,这将允许第一个插入语句,但不允许第二个插入语句,因为它违反了主键约束。