![](/img/trans.png)
[英]UPDATE statement conflicted with the FOREIGN KEY constraint on Sql Server 2014
[英]Foreign key error in SQL Server 2014
抱歉,我在这里必须更具体。 因此,以下是SQL我的代码。 复制并粘贴到SQL中。 基本上,我正在创建链接在一起的13个表。
IF EXISTS (SELECT*FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='EventType')
BEGIN
DROP TABLE EventType
END
GO
IF EXISTS (SELECT*FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='EventLocation')
BEGIN
DROP TABLE EventLocation
END
GO
IF EXISTS (SELECT*FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='StudentEvent')
BEGIN
DROP TABLE StudentEvent
END
GO
IF EXISTS (SELECT*FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='Event')
BEGIN
DROP TABLE Event
END
GO
IF EXISTS (SELECT*FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='CurrentAddress')
BEGIN
DROP TABLE CurrentAddress
END
GO
IF EXISTS (SELECT*FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='PreviousAddress')
BEGIN
DROP TABLE PreviousAddress
END
GO
IF EXISTS (SELECT*FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='ContactType')
BEGIN
DROP TABLE ContactType
END
GO
IF EXISTS (SELECT*FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='Contact')
BEGIN
DROP TABLE Contact
END
GO
IF EXISTS (SELECT*FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='StudentMajor')
BEGIN
DROP TABLE StudentMajor
END
GO
IF EXISTS (SELECT*FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='Major')
BEGIN
DROP TABLE Major
END
GO
IF EXISTS (SELECT*FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='Citizenship')
BEGIN
DROP TABLE Citizenship
END
GO
IF EXISTS (SELECT*FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='Country')
BEGIN
DROP TABLE Country
END
IF EXISTS (SELECT*FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='Student')
BEGIN
DROP TABLE Student
END
GO
CREATE TABLE Student
(
StudentID int identity PRIMARY KEY,
FirstName varchar (50),
LastName varchar (30)
)
GO
CREATE TABLE Country
(
CountryID int identity PRIMARY KEY,
CountryOfBirth varchar (10),
StudentID int FOREIGN KEY REFERENCES Student(StudentID)
)
GO
CREATE TABLE Citizenship
(
CitizenshipID int identity PRIMARY KEY,
CountryOfCitizenship1 varchar (10),
CountryOfCitizenship2 varchar (10),
StudentID int FOREIGN KEY REFERENCES Student(StudentID),
CountryID int FOREIGN KEY REFERENCES Country(CountryID)
)
GO
CREATE TABLE Major
(
Majorid int identity PRIMARY KEY,
MajorName varchar(30),
GraduatedMajor varchar (30)
)
CREATE TABLE StudentMajor
(
StudentMajorid int identity,
StudentID int FOREIGN KEY REFERENCES Student(StudentID),
MajorID int FOREIGN KEY REFERENCES Major(MajorID)
)
GO
ALTER TABLE StudentMajor
ADD constraint uk_sm UNIQUE (StudentID,MajorID)
CREATE TABLE Contact
(
ContactId int identity PRIMARY KEY,
StudentID int FOREIGN KEY REFERENCES Student(StudentID),
ContactInfo varchar (8),
ContactDate datetime
)
GO
CREATE TABLE ContactType
(
ContactTypeId int identity PRIMARY KEY,
ContactID int FOREIGN KEY REFERENCES Contact(ContactID)
)
GO
CREATE TABLE PreviousAddress
(
PreviousAddressId int identity PRIMARY KEY,
Address1 varchar (50),
Address2 varchar (50),
City varchar (20),
State varchar (20),
Pincode char (10),
StudentID int FOREIGN KEY REFERENCES Student(StudentID)
)
GO
CREATE TABLE CurrentAddress
(
CurrentAddressId int identity PRIMARY KEY,
Address1 varchar (50),
Address2 varchar (50),
City varchar (20),
State varchar (20),
Pincode char (10),
StudentID int FOREIGN KEY REFERENCES Student(StudentID)
)
GO
CREATE TABLE EventType
(
EventTypeID int identity PRIMARY KEY
)
CREATE TABLE Event
(
EventId int identity PRIMARY KEY,
EventDate datetime,
EventTitle varchar (50),
EventTime datetime,
EventTypeID int
)
GO
ALTER TABLE Event
ADD constraint fk_Event
FOREIGN KEY (EventTypeID) REFERENCES EventType(EventTypeID)
CREATE TABLE StudentEvent
(
StudentEventId int identity PRIMARY KEY,
StudentID int FOREIGN KEY REFERENCES Student(StudentID),
EventID int FOREIGN KEY REFERENCES Event(EventID),
Comment varchar(2000)
)
GO
CREATE TABLE EventLocation
(
EventLocationId int identity PRIMARY KEY,
EventCountry varchar (50),
EventState varchar (50),
EventAddress1 varchar (100),
EventAddress2 varchar (100),
EventCity varchar (50),
EventPincode char (10),
EventID int FOREIGN KEY REFERENCES Event(EventID)
)
GO
现在,上述代码的问题在于它将在第一次执行时完美执行,但是当我第二次执行时,它将引发以下错误。
无法删除对象“ EventType”,因为它是由FOREIGN KEY约束引用的。
讯息2714,第16级,州立6,第132行
数据库中已经有一个名为“ EventType”的对象。Msg 4902,第16级,状态1,第143行
无法找到对象“事件”,因为它不存在或您没有权限。消息1767,级别16,状态0,第153行
外键'FK__EventLoca__Event__6265874F'引用无效的表'Event'。 消息1750,级别16,状态0,第153行无法创建约束或索引。 请参阅先前的错误。
有没有更好的方法来编码外键,或者我做错了什么。
在此先感谢您的帮助!
您应该首先创建表:
CREATE TABLE Event
(
EventId int identity PRIMARY KEY,
EventDate datetime,
EventTitle varchar (50),
EventTime datetime,
EventTypeID int
)
GO
CREATE TABLE EventType
(
EventTypeID int identity PRIMARY KEY
);
ALTER TABLE Event
ADD constraint fk_Event
FOREIGN KEY (EventTypeID) REFERENCES EventType(EventTypeID);
或者,您可以将表创建为:
CREATE TABLE EventType
(
EventTypeID int identity PRIMARY KEY
);
CREATE TABLE Event
(
EventId int identity PRIMARY KEY,
EventDate datetime,
EventTitle varchar (50),
EventTime datetime,
EventTypeID int,
constraint fk_Event FOREIGN KEY (EventTypeID) REFERENCES EventType(EventTypeID)
);
更新:
无法删除对象“ EventType”,因为它是由FOREIGN KEY约束引用的。 消息2714,级别16,状态6,行132数据库中已经有一个名为“ EventType”的对象。 消息4902,级别16,状态1,行143找不到对象“事件”,因为它不存在或您没有权限。 消息1767,级别16,状态0,第153行外键'FK__EventLoca__Event__6265874F'引用了无效的表'Event'。 消息1750,级别16,状态0,第153行无法创建约束或索引。 请参阅先前的错误。
此错误消息很明显,您无法删除另一个表中引用的表,因此必须首先删除Event
表,然后才能删除EventsType
表。
尝试创建表EventType
之前,先将其用作表Event
的引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.