簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM