日期:2014-05-17 浏览次数:20725 次
--【联合主键的外键问题请教】没有与..引用列列表匹配的主键或候选键。
--建立图书表
Create Table Books
(
Id int IDENTITY(1,1) not null,
Title nvarchar(200) not null,
PublishDate datetime not null,
ISBN nvarchar(50) not null,
UnitPrice money not null,
ContentDescription nvarchar(max) null,
CategoryId int not null, --分类ID,打算作为外键
CONSTRAINT PK_BID_ISBN Primary Key(Id,ISBN) --联合作主键,Id,ISBN都是主键了
)
GO
--建立分类表:
Create Table Categories
(
Id int IDENTITY(1,1) Not null, --分类表的主键之一(联合主键)
Name nvarchar(200) not null,
CONSTRAINT PK_Cate_ID_Name Primary Key(Id,Name) --联合作主键,Id,Name 都是主键了
)
GO
Alter Table Books
Add Constraint FK_Books_Cates
Foreign Key (CategoryId) references Categories(Id)
--报错:
/*消息 1776,级别 16,状态 0,第 1 行
在被引用表 'Categories' 中没有与外键 'FK_Books_Cates' 中的引用列列表匹配的主键或候选键。
无法创建约束。请参阅前面的错误消息。
*/
--【疑问】分类表的ID已经是主键了的啊,为什么会报错呢??
--【疑问】先对分类表的ID字段建立唯一约束后再执行上面的创建外键语句就成功了,为什么??
Alter Table Categories
add CONSTRAINT pk_cateid_unique unique(id)