2016-08-18 225 views
2

我有两个表与外键约束

冲突

琪:

CREATE TABLE [dbo].[R_ACADEMIE](
    [ID_ACADEMIE] [dbo].[IDENTIFIANT] NOT NULL, 
    [LC_ACADEMIE_CODE] [dbo].[LIBELLE_COURT] NOT NULL, 
    [LM_ACADEMIE_LIBELLE] [dbo].[LIBELLE_MOYEN] NOT NULL, 
CONSTRAINT [PK_R_ACADEMIE] PRIMARY KEY NONCLUSTERED 
(
    [ID_ACADEMIE] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
GO 

我在E_VOYAGEUR表中添加我的专栏

ALTER TABLE E_VOYAGEUR ADD ID_ACADEMIE IDENTIFIANT NOT NULL DEFAULT 0; 

我想创建一个FK在我的E_VOYAGEUR桌上我这样做:

ALTER TABLE [dbo].[E_VOYAGEUR] WITH CHECK ADD CONSTRAINT [FK_E_VOYAGE_A_VOYAGEU_E_ACADEMIE] FOREIGN KEY([ID_ACADEMIE]) 
REFERENCES [dbo].[R_ACADEMIE] ([ID_ACADEMIE]) 
GO 

我有这样的错误:

The ALTER TABLE statement is in conflict with the FOREIGN KEY constraint " FK_E_VOYAGE_A_VOYAGEU_E_ACADEMIE " . The conflict occurred in database " DEV ", " dbo.R_ACADEMIE " table, column ' ID_ACADEMIE ' .

+2

听起来好像你在R_ACADEMIE中不存在E_VOYAGEUR中的ID_ACADEMIE值。当引用的表中不存在某个值时,无法将外键添加到现有数据中。您将需要插入缺失的值。 – SMM

+0

@SMM我更新了我的文章。在'R_ACADEMIE'中,我有'ID_ACADEMIE' – Mercer

+0

您是否将E_VOYAGEUR.ID_ACADEMIE中的值作为R_ACADEMIE中的行插入?例如您用'not null default 0'将新列添加到E_VOYAGEUR中...您是否在R_ACADEMIE中有ID_ACADEMIE = 0的记录? – SMM

回答

3

看来你的表E_VOYAGEUR已经有一些价值观和你正在改变该表以默认值的新列ID_ACADEMIE添加为0。 这使列ID_ACADEMIE的值为0的表E_VOYAGEUR中的所有行。并且,当您向该表添加外键约束时,引用表[R_ACADEMIE]在列ID_ACADEMIE中可能没有值为'0'的条目,并且似乎是此问题的原因。

在将外键添加到表E_VOYAGEUR之前,请确保ID_ACADEMIE列中的值具有表[R_ACADEMIE]中的引用。