2015-11-05 96 views
0

爲什麼表Room不接受外鍵?爲什麼外鍵不被接受?

CREATE TABLE RoomType (
Roomtype nvarchar(2) NOT NULL, 
Description nvarchar(20), 
Responsibility nvarchar(20), 
primary key (Roomtype) 
) 

Create table Room (
RoomID nvarchar(2) NOT NULL, 
Capacity numeric(3) 
) 
ALTER TABLE Room 
add foreign key(Roomtype) 
references RoomType(Roomtype) 

這是我運行alter table時得到的錯誤消息。

主要錯誤0x80040E11,次要錯誤0 ALTER TABLE房 添加外鍵(Roomtype) 引用RoomType(Roomtype) 無效的列ID。 [房間類型]

+0

任何錯誤信息? –

+0

現在就添加它。謝謝。 –

+0

添加外鍵時,是否要引用Room表中的現有字段?添加外鍵約束不會添加該字段。 –

回答

0

在嘗試聲明外鍵約束之前,需要將外鍵作爲字段添加到房間表中。

CREATE TABLE RoomType (
Roomtype nvarchar(2) NOT NULL, 
Description nvarchar(20), 
Responsibility nvarchar(20), 
primary key (Roomtype) 
) 

Create table Room (
RoomID nvarchar(2) NOT NULL, 
Capacity numeric(3) 
) 

ALTER TABLE Room 
ADD Roomtype nvarchar(2) NOT NULL 

ALTER TABLE Room 
add constraint FK_Give_Me_A_Good_Name foreign key(Roomtype) 
references RoomType(Roomtype) 
0

該列必須存在之前,您可以FK到它。

CREATE TABLE RoomType (
Roomtype nvarchar(2) NOT NULL, 
Description nvarchar(20), 
Responsibility nvarchar(20), 
primary key (Roomtype) 
) 

Create table Room (
RoomID nvarchar(2) NOT NULL, 
Capacity numeric(3), 
RoomtypeA nvarchar(2) NOT NULL 
) 

ALTER TABLE [dbo].[Room] ADD CONSTRAINT FK_MyName FOREIGN KEY (RoomtypeA) REFERENCES dbo.Roomtype (Roomtype) 
GO 
+0

請注意,爲了避免歧義,我將其製作爲「RoomTypeA」,您無需將其命名爲這樣。 – granadaCoder