Alter statement Conflit avec une key étrangère, mais l'ID existe dans les deux tables

J'ai 2 tables, ici j'essaie d'insert une relation FK. Mais, j'obtiens des erreurs quand j'essaye de changer la table pour créer une relation de FK aide svp … J'ai l'ID de club dans les deux tables, j'ai commenté ci-dessous, mais je ne suis pas sûr pourquoi j'obtiens toujours l'erreur de contrainte .

Quelle est l'origine de l'erreur de contrainte?

CREATE TABLE [dbo].[Clubs]( [ClubID] [int] IDENTITY(1,1) NOT NULL, // ClubID is here [Name] [nvarchar](128) NOT NULL, [Description] [nvarchar](2047) NULL, [Created] [datetime] NOT NULL, [Modified] [datetime] NULL, CONSTRAINT [PK_Clubs] PRIMARY KEY CLUSTERED ( [ClubID] 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 CREATE TABLE [dbo].[MemberClubs]( [MemberClubID] [int] IDENTITY(1,1) NOT NULL, [MemberID] [bigint] NOT NULL, [ClubID] [int] NOT NULL, //Club ID is here as well CONSTRAINT [PK_MemberClubs] PRIMARY KEY CLUSTERED ( [MemberClubID] 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 SET IDENTITY_INSERT [dbo].[MemberClubs] ON GO INSERT [dbo].[MemberClubs] ([MemberClubID], [MemberID], [ClubID]) VALUES (1, 1, 1) GO INSERT [dbo].[MemberClubs] ([MemberClubID], [MemberID], [ClubID]) VALUES (2, 2, 1) GO INSERT [dbo].[MemberClubs] ([MemberClubID], [MemberID], [ClubID]) VALUES (3, 3, 1) GO INSERT [dbo].[MemberClubs] ([MemberClubID], [MemberID], [ClubID]) VALUES (4, 4, 1) GO INSERT [dbo].[MemberClubs] ([MemberClubID], [MemberID], [ClubID]) VALUES (5, 5, 1) GO SET IDENTITY_INSERT [dbo].[MemberClubs] OFF GO // *** The error is over here ALTER TABLE [dbo].[MemberClubs] WITH CHECK ADD CONSTRAINT [FK_MemberClubs_Clubs] FOREIGN KEY([ClubID]) REFERENCES [dbo].[Clubs] ([ClubID]) GO // $$$ The second FK constraint error is over here ALTER TABLE [dbo].[MemberClubs] CHECK CONSTRAINT [FK_MemberClubs_Clubs] GO ALTER TABLE [dbo].[MemberClubs] WITH CHECK ADD CONSTRAINT [FK_MemberClubs_Members] FOREIGN KEY([MemberID]) REFERENCES [dbo].[Members] ([MemberID]) GO ALTER TABLE [dbo].[MemberClubs] CHECK CONSTRAINT [FK_MemberClubs_Members] GO 

L' erreur :

Msg 547, niveau 16, état 0, ligne * * * (ci-dessus)

 The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_MemberClubs_Clubs". The conflict occurred in database "newDb", table "dbo.Clubs", column 'ClubID'. 

Msg 4917, niveau 16, état 0, ligne $$$ (ci-dessus)

 Constraint 'FK_MemberClubs_Clubs' does not exist. 

Msg 4916, niveau 16, état 0, ligne $$$ (ci-dessus)

 Could not enable or disable the constraint. See previous errors. 

Vous ajoutez 5 lignes dans la table MemberClubs reference à Club.ClubId = 1 , avant d'append une relation de key étrangère aux Clubs .

Donc, afin de maintenir l'intégrité référentielle, vous devez append une ligne avec ClubId = 1 dans Clubs avant d'append / activer la contrainte de key étrangère:

 SET IDENTITY_INSERT [dbo].[Clubs] ON INSERT INTO [dbo].[Clubs](ClubId, Name, Description, Created, Modified) VALUES (1, 'Foo', 'Bar', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) SET IDENTITY_INSERT [dbo].[Clubs] OFF 

Ensuite, la création de key étrangère réussit:

 ALTER TABLE [dbo].[MemberClubs] WITH CHECK ADD CONSTRAINT [FK_MemberClubs_Clubs] FOREIGN KEY([ClubID]) REFERENCES [dbo].[Clubs] ([ClubID]) GO 

Si ce n'est pas un exemple et que c'est ce que vous essayez d'accomplir, une chose que je peux voir juste en regardant vos scripts est que vous essayez de créer une relation FK avec une table en utilisant des données incohérentes.

Pour créer la contrainte, des données cohérentes doivent exister. Dans le code que vous avez posté, le Club n'a aucune donnée, donc une contrainte ne peut pas être créée car les MemberClubs ont des données «orphelines» – par exemple, MemberClubs tente de referencer des éléments dans les Clubs qui n'existent pas.