2015-11-05 58 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