这是我创建的表格之一:
create table take
(SID integer references student(SID),
CID integer references course(CID),
FID integer references faculty(FID),
semester varchar(10) primary key constraint chk check(semester in('Fall','spring')),
year_a integer ,
grade integer)
插入值时:
insert into take
values(105,2,1001,'spring',2009,9)
我收到以下错误
Msg 2627,Level 14,State 1,Line 1
违反PRIMARY KEY约束'PK_ 取 _0184BAF3D4160567'。无法在对象'dbo.take'中插入重复键。重复键值为(fall)。
请帮忙
答案 0 :(得分:1)
嗯,您已定义semester
只能存储两个值中的一个 - fall
或spring
,并且您已将其设为主键(唯一标识每一行)。
因此,一旦您使用fall
存储了一行,而使用spring
存储了第二行,则您的约束会禁止任何进一步的插入。
我非常怀疑你想只用semester
只有两个可能的值作为主键......
我相信你可能要做的是:
semester
限制为fall
和spring
(semester, year)
上创建主键,以便您可以fall 2013
,spring 2014
,fall 2014
等。在这种情况下,您需要将创建脚本更改为:
CREATE TABLE dbo.Take
(SID INT REFERENCES student(SID),
CID INT REFERENCES course(CID),
FID INT REFERENCES faculty(FID),
Semester VARCHAR(10)
CONSTRAINT CHK_Semester CHECK(Semester IN ('Fall','spring')),
Year_a INT,
grade INT,
CONSTRAINT PK_Take PRIMARY KEY CLUSTERED(Semester, Year_a)
)