【发布时间】:2015-12-08 09:27:31
【问题描述】:
我正在尝试将数据插入到我的 SQL Server 2014 版本中,但我不断收到此错误。我尝试在整个互联网上进行搜索,最后,我有点明白人们在说什么,但仍然难以理解我的特定代码有什么问题。
所有表都是空的,没有数据。一旦设置了外键,我就无法添加数据。我读到必须填充两个表才能使其工作,但是当我无法添加任何内容时会发生这种情况吗?如果我在外键之前添加数据,那么我无法添加外键。请帮忙!
当尝试使用 INSERT INTO 将数据插入 Gym 行时,我收到此错误:
INSERT 语句与 FOREIGN KEY 约束“FK__Gym__staffNo”冲突。冲突发生在数据库“FitnessApp”、表“dbo.Staff”、列“staffNo”中。
在尝试将数据添加到 Equipment 或 Staff 表时也会发生这种情况。
在此处查看代码:
架构:
CREATE TABLE Gym
(
gymNo int NOT NULL IDENTITY(1,1),
staffNo int NOT NULL,
streetAddress varchar(100) NOT NULL,
streetAddress2 varchar(100) NULL,
city varchar(50) NOT NULL,
state char(2) NOT NULL,
zip char(5) NOT NULL,
phone char(10) NOT NULL
) ON [fitnessPlusGroup1];
CREATE TABLE Staff
(
staffNo int NOT NULL IDENTITY(1,1),
gymNo int NOT NULL,
position varchar(50) NOT NULL,
firstName varchar(50) NOT NULL,
lastName varchar(50) NOT NULL,
streetAddress varchar(100) NOT NULL,
streetAddress2 varchar(100) NULL,
city varchar(50) NOT NULL,
state char(2) NOT NULL,
zip char(5) NOT NULL,
phone char(10) NOT NULL,
hireDate date NOT NULL
) ON [fitnessPlusGroup1];
CREATE TABLE Member
(
memberNo int NOT NULL IDENTITY(1,1),
gymNo int NOT NULL,
firstName varchar(30) NOT NULL,
lastName varchar(30) NOT NULL,
streetAddress varchar(100) NOT NULL,
streetAddress2 varchar(100) NULL,
city varchar(50) NOT NULL,
state char(2) NOT NULL,
zip char(5) NOT NULL,
phone char(10) NOT NULL,
memberSince date NOT NULL,
scheduleID int NULL
) ON [fitnessPlusGroup1];
CREATE TABLE Schedule
(
scheduleID int NOT NULL IDENTITY(1,1),
staffNo int NOT NULL,
trainDate date NOT NULL,
trainTime time(0) NOT NULL
) ON [fitnessPlusGroup1];
CREATE TABLE Equipment
(
equipNo int NOT NULL IDENTITY(1,1),
gymNo int NOT NULL,
staffNo int NOT NULL,
name varchar(50) NOT NULL,
quantity int NOT NULL
) ON [fitnessPlusGroup1];
外键关系设置:
ALTER TABLE Gym
ADD FOREIGN KEY (staffNo) REFERENCES Staff(staffNo);
ALTER TABLE Staff
ADD FOREIGN KEY (gymNo) REFERENCES Gym(gymNo);
ALTER TABLE Member
ADD FOREIGN KEY (gymNo) REFERENCES Gym(gymNo);
ALTER TABLE Member
ADD FOREIGN KEY (scheduleID) REFERENCES Schedule(scheduleID);
ALTER TABLE Schedule
ADD FOREIGN KEY (staffNo) REFERENCES Staff(staffNo);
ALTER TABLE Equipment
ADD FOREIGN KEY (gymNo) REFERENCES Gym(gymNo);
ALTER TABLE Equipment
ADD FOREIGN KEY (staffNo) REFERENCES Staff(staffNo);
给出错误的插入命令:
INSERT INTO Gym(staffNo, streetAddress, streetAddress2, city, state, zip, phone)
VALUES (1, '7300 W Greens Rd', NULL, 'Houston', 'TX', '77064', '2818946151');
如果这看起来有点多,任何帮助将不胜感激,我希望我提供了所有我能提供的信息..
【问题讨论】:
-
您的
Staff表中是否存在带有id = 1的staffNo?这似乎就是它所抱怨的。您有一个外键约束,因此您只能引用存在的项目。您首先需要在staff中填充查找数据,然后才能使用 ID 链接到它。 -
如果您不喜欢像
FK__Gym__staffNo这样的 FK 约束名称,那么您应该像这样明确命名您的 FK 约束:ALTER TABLE Gym ADD CONSTRAINT FK_Gym_Staff FOREIGN KEY (staffNo) REFERENCES Staff(staffNo);- 通过添加这个 FK 名称,如果出现问题,您会收到更清晰、更直观和更清晰的错误消息 -
您好坦纳,感谢您的帮助。任何表中都不存在数据。当我创建数据库时,我首先创建了表,然后是主键,然后是外键。我也尝试过先填充表然后添加外键,但我收到一个错误,说它不能添加外键。我怎样才能向员工添加一些东西?我尝试使用 INSERT INTO Staff(gymNo, position, etc..) VALUES (1, 'trainer', etc..) 但我仍然收到错误。
-
感谢 marc_s 的考虑。我也会这样做。
-
当我尝试在 Equipment 或 Member 中添加一些东西时,它也会抱怨gymNo。
标签: sql sql-server ssms