【发布时间】:2012-05-25 00:58:03
【问题描述】:
我使用的是 SQL Server 2008。当我尝试创建表“Dossier_Financement”时出现错误:
create table Dossier_Financement
(
ID_Reunion integer foreign key references Reunion(ID_Reunion),
ID_Dossier integer foreign key references Dossier(ID_Dossier),
Decision varchar(20),
Motif text,
Montant_Retenu decimal(6,2),/* montant accorder */
Duree_Retenu smallint,/*nb jours accorder */
Nom_Giac varchar(50) foreign key references GIAC(Nom_Giac),
primary key(ID_Dossier,Nom_Giac,ID_Reunion)
)
GO
这是两张表:
create table Reunion
(
ID_Reunion integer ,
Date_Reunion datetime,
ID_Membre integer,/*jquery*/
Type_Reunion varchar(20),
Nom_Giac varchar(50),
foreign key(ID_Membre,Nom_Giac) references Membre(ID_Membre,Nom_Giac),
primary key(ID_Reunion,Nom_Giac)
)
GO
create table Dossier_Financement
(
ID_Reunion integer foreign key references Reunion(ID_Reunion),
ID_Dossier integer foreign key references Dossier(ID_Dossier),
Decision varchar(20),
Motif text,
Montant_Retenu decimal(6,2),/* montant accorder */
Duree_Retenu smallint,/*nb jours accorder */
Nom_Giac varchar(50) foreign key references GIAC(Nom_Giac),
primary key(ID_Dossier,Nom_Giac,ID_Reunion)
)
GO
“Reunion”正常执行,没有任何问题,但在尝试创建第二个表时出现此错误:
Msg 1776, Level 16, State 0, Line 1
There are no primary or candidate keys in the referenced table 'Reunion' that match the referencing column list in the foreign key 'FK__Dossier_F__ID_Re__5629CD9C'.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.
【问题讨论】:
-
就是它所说的。 “主表”中的列必须是键。如果 Reunion.ID_Reunion 未与 Now_Giac 配对,则不符合此要求。
-
Reunion 表中的 ID_Reunion 必须为主键。
-
但它确实有一个主键 Reunion(ID_Reunion)
-
@Yassineedouiri 它有一个复合 PK (ID_Reunion, Now_Giac)。这并不意味着 ID_Reunion(没有 Now_Giac)是一个 Key。
-
创建表 Reunion ( ID_Reunion integer , primary key(ID_Reunion,Nom_Giac) ) GO
标签: sql sql-server sql-server-2008 foreign-keys