使用主键和约束sql server 2012创建表时出错

时间:2013-10-16 23:03:43

标签: sql sql-server sql-server-2012

这是我创建的表格之一:

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)。

请帮忙

1 个答案:

答案 0 :(得分:1)

嗯,您已定义semester只能存储两个值中的一个 - fallspring,并且您已将其设为主键(唯一标识每一行)。

因此,一旦您使用fall存储了一行,而使用spring存储了第二行,则您的约束会禁止任何进一步的插入。

非常怀疑你想只用semester只有两个可能的值作为主键......

我相信你可能要做的是:

  • semester限制为fallspring
  • (semester, year)上创建主键,以便您可以fall 2013spring 2014fall 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)
)