【发布时间】:2017-07-04 10:58:00
【问题描述】:
我创建了两个表。它们通过主键和外键连接。当我插入新值时,它说不能在对象中插入重复的键。这是我的桌子
create table person (
sinNum int primary key not null,
gender varchar(6) not null check (gender in ('male','female')) default 'female',
age int not null check (age>=18 and age<=100),
emailAddr varchar (50) not null,
phoneNum int not null,
)
create table employee (
empId int identity (1,1) unique,
lastName varchar (30) not null,
firstName varchar (30) not null,
sinNum int unique foreign key references person (sinNum),
departmentId int foreign key references department (departmentId),
position varchar (20) not null check (position in ('clerk','assistant','supervisor','manager','director','president')) default'clerk',
baseSalary float not null
)
这是我的插入语句
insert into person (sinNum,gender,age,emailAddr, phoneNum) values (333,
'female', 24, 'dds', 2121)
insert into employee(lastName,firstName, sinNum, departmentId,
position,baseSalary) values ('Snow','John',333,20,'clerk',4000)
这里是错误信息
违反主键约束“PK__person__228E26BE3A9512B2”。 无法在对象“dbo.person”中插入重复键。重复键 值为 (333)。
谁能给我指路?非常感谢
【问题讨论】:
-
您是否要再次向
dbo.person插入“333”?你不能这样做,因为它是主键破坏。具有主键的字段不能有冗余数据。 -
我想怎么办?因为我需要员工和人只能通过 sinNum 匹配。
-
@Jeffery 如果 person.sisNum 需要唯一,您可以考虑使用 MERGE 来更新记录,而不是尝试插入重复记录。
-
已经有一个sinNum 333的人,尝试查询
SELECT * FROM person WHERE sinNum = 333。如果它返回一条记录,那么您就知道这是问题所在。
标签: sql sql-server