English 中文(简体)
SQL错误 : "没有主键 或候选键 在引用的表格..."
原标题:SQL ERROR : "There are no primary or candidate keys in the referenced table..."

Im 使用 SQL 服务器 2008 。 当我试图创建表格 Dossier_ finance 时, 我收到错误 :

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

留尼汪执行正常,没有问题,但我在试图创建第二张表格时会犯这个错误:

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.
最佳回答

视实际模型需要/要求而定,一个解决办法是提及键,这需要all 部件(注意在定义中添加 Nom_Giac ):

create table Dossier_Financement 
(
    ...
    foreign key(ID_Reunion,Nom_Giac) references Reunion(ID_Reunion,Nom_Giac),
)

根据 Mark M s 的回答,另一个解决方案是使 ID_ reunion 列成为关键(注意从 PK 定义中删除 < code> Nom_ Giac ):

create table Reunion 
(
    ...
    primary key(ID_Reunion)
)

这将使得ID-reunion成为密钥(实际上主要密钥),然后可以用 外国密钥Reunion(ID-Reunion) 引用。

快乐的编码!

问题回答

您只能使用您正在引用的表格的完整主键来创建外国密钥。 您的第二张表格试图仅使用留尼汪表格的一半主键来创建外国密钥 。

在您想要创建索引的列上创建唯一的索引 :

CREATE UNIQUE NONCLUSTERED INDEX [UX_Index] ON dbo.[Table]([Column1],[Column2])




相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

难以执行 REGEXP_SUBSTR

I m 查询Oracle 10g。 我有两张表格(样本数据见下文)。 i m 试图提取一些领域

SQL Query Shortcuts

What are some cool SQL shorthands that you know of? For example, something I learned today is you can specify to group by an index: SELECT col1, col2 FROM table GROUP BY 2 This will group by col2

PHP array callback functions for cleaning output

I have an array of output from a database. I am wondering what the cleanest way to filter the values is example array Array ( [0] => Array ( [title] => title 1 ...

OracleParameter and DBNull.Value

we have a table in an Oracle Database which contains a column with the type Char(3 Byte). Now we use a parameterized sql to select some rows with a DBNull.Value and it doesn t work: OracleCommand ...

Running numbers in SQL

I have a SQL-statement like this: SELECT name FROM users WHERE deleted = 0; How can i create a result set with a running number in the first row? So the result would look like this: 1 Name_1 2 ...

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...

热门标签