pbd22



Hi.

Please excuse the rookie question, but I am not sure how to get around this error.

"The INSERT statement conflicted with the FOREIGN KEY constraint "FK_users_editprofile". The conflict occurred in database "MyDB", table "dbo.editprofile", column 'userid'.
The statement has been terminated."


I encountered the error when running a series of test INSERT statements after creating a bunch of FK/PK relationships
between the parent table DBO.USERS and several child tables. The one that this error complains about is DBO.EDITPROFILE.

Code Snippet

INSERT INTO users (lastname, firstname, email, alternateemail, password, role, securityquestion, securityanswer, zipcode, birthmonth, birthday, birthyear, gender, city, state, country, registerdate, editdate, confirmed)
VALUES('gore', 'albert', 'bigal@inconvenienttruth.org', null, 'hugatree', 'User', 'what is your school ', 'harvard', 06510, 1, 31, 1970, 'Male', 'Greenwich', 'Connecticut', 'USA', '2007-06-22', null, 1)

INSERT INTO precedence (userid, profileid, searchname, proximity)
VALUES(1, 3, 'random search', 1)

INSERT INTO userphotos (photoname, userid, location, size, caption, isdefault, ispublic, date, nophoto)
VALUES('random image', 1, 'x/y/z/', 23422, 'random', 0, 1, '1998-12-25', 0)

INSERT INTO editprofile(headline, aboutme, userid, date, interests)
VALUES('Random Headline', 'random', 1, '1998-12-25', 'I am interested in anything random')


DBO.USERS:

Code Snippet

CREATE TABLE [dbo].[users](
[userid] [int] IDENTITY(1,1) NOT NULL,
[lastname] [varchar](50) NULL,
[firstname] [varchar](50) NULL,
[email] [varchar](50) NOT NULL,
[alternateemail] [varchar](50) NULL,
[password] [varchar](50) NOT NULL,
[role] [char](50) NOT NULL,
[securityquestion] [varchar](50) NOT NULL,
[securityanswer] [varchar](50) NOT NULL,
[zipcode] [int] NOT NULL,
[birthmonth] [tinyint] NOT NULL,
[birthday] [tinyint] NOT NULL,
[birthyear] [int] NOT NULL,
[gender] [char](10) NULL,
[city] [varchar](50) NULL,
[state] [varchar](50) NULL,
[country] [varchar](50) NULL,
[registerdate] [datetime] NOT NULL,
[editdate] [datetime] NULL,
[confirmed] [bit] NULL CONSTRAINT [DF__Users__confirmed__4CC05EF3] DEFAULT ((0)),
CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED
(
[userid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
CONSTRAINT [IX_email] UNIQUE NONCLUSTERED
(
[email] 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 ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[users] WITH NOCHECK ADD CONSTRAINT [FK_users_editprofile] FOREIGN KEY([userid])
REFERENCES [dbo].[editprofile] ([userid])
GO
ALTER TABLE [dbo].[users] CHECK CONSTRAINT [FK_users_editprofile]
GO
ALTER TABLE [dbo].[users] WITH NOCHECK ADD CONSTRAINT [FK_users_lastlogin] FOREIGN KEY([userid])
REFERENCES [dbo].[lastlogin] ([userid])
GO
ALTER TABLE [dbo].[users] CHECK CONSTRAINT [FK_users_lastlogin]
GO
ALTER TABLE [dbo].[users] WITH NOCHECK ADD CONSTRAINT [FK_users_precedence] FOREIGN KEY([userid])
REFERENCES [dbo].[precedence] ([userid])
GO
ALTER TABLE [dbo].[users] CHECK CONSTRAINT [FK_users_precedence]
GO
ALTER TABLE [dbo].[users] WITH NOCHECK ADD CONSTRAINT [FK_users_savedsearches] FOREIGN KEY([userid])
REFERENCES [dbo].[savedsearches] ([userid])
GO
ALTER TABLE [dbo].[users] CHECK CONSTRAINT [FK_users_savedsearches]
GO
ALTER TABLE [dbo].[users] WITH NOCHECK ADD CONSTRAINT [FK_users_userphotos] FOREIGN KEY([userid])
REFERENCES [dbo].[userphotos] ([userid])
GO
ALTER TABLE [dbo].[users] CHECK CONSTRAINT [FK_users_userphotos]




DBO.EDITPROFILE

Code Snippet

CREATE TABLE [dbo].[editprofile](
[editprofileid] [int] IDENTITY(1,1) NOT NULL,
[headline] [varchar](50) NULL,
[aboutme] [text] NULL,
[userid] [int] NOT NULL,
[date] [datetime] NOT NULL,
[interests] [text] NULL,
CONSTRAINT [PK_EditProfile] PRIMARY KEY CLUSTERED
(
[date] ASC,
[userid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]








Re: The INSERT statement conflicted with the FOREIGN KEY constraint FK_source_destination.

Arnie Rowland


This CONSTRAINT

ALTER TABLE [dbo].[users] WITH NOCHECK ADD CONSTRAINT [FK_users_editprofile] FOREIGN KEY([userid])
REFERENCES [dbo].[editprofile] ([userid])
GO

requires data to be in the EditProfile table BEFORE adding to the Users table.

I think that may be a little 'backward'. Shouldn't the Users data be entered first

Remove this CONSTRAINT, and put a similar CONSTRAINT on the Edit Profile table

ALTER TABLE [dbo].[EditProfile] WITH NOCHECK ADD CONSTRAINT [FK_EditProfile_Users] FOREIGN KEY([UserID])
REFERENCES [dbo].[Users] ([UserID])
GO







Re: The INSERT statement conflicted with the FOREIGN KEY constraint FK_source_destination.

pbd22


Thanks Arnie.

You are absolutely right. The users table must be populated first.
I have done as you advised - I have flipped the constraints, removing
it from the "users" table and putting it on the child tables (editprofile,
userphotos, and precedence).

I ran the INSERT statements again. The users table was successfully populated and then
I got the following errors:

ERRORS:

Code Snippet

(1 row(s) affected)
Msg 547, Level 16, State 0, Line 22
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_precedence_users". The conflict occurred in database "MyDB", table "dbo.users", column 'userid'.
The statement has been terminated.
Msg 547, Level 16, State 0, Line 25
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_userphotos_users". The conflict occurred in database "MyDB", table "dbo.users", column 'userid'.
The statement has been terminated.
Msg 547, Level 16, State 0, Line 28
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_editprofile_users". The conflict occurred in database "MyDB", table "dbo.users", column 'userid'.
The statement has been terminated.


DBO.USERS:

Code Snippet

CREATE TABLE [dbo].[users](
[userid] [int] IDENTITY(1,1) NOT NULL,
[lastname] [varchar](50) NULL,
[firstname] [varchar](50) NULL,
[email] [varchar](50) NOT NULL,
[alternateemail] [varchar](50) NULL,
[password] [varchar](50) NOT NULL,
[role] [char](50) NOT NULL,
[securityquestion] [varchar](50) NOT NULL,
[securityanswer] [varchar](50) NOT NULL,
[zipcode] [int] NOT NULL,
[birthmonth] [tinyint] NOT NULL,
[birthday] [tinyint] NOT NULL,
[birthyear] [int] NOT NULL,
[gender] [char](10) NULL,
[city] [varchar](50) NULL,
[state] [varchar](50) NULL,
[country] [varchar](50) NULL,
[registerdate] [datetime] NOT NULL,
[editdate] [datetime] NULL,
[confirmed] [bit] NULL CONSTRAINT [DF__Users__confirmed__4CC05EF3] DEFAULT ((0)),
CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED
(
[userid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
CONSTRAINT [IX_email] UNIQUE NONCLUSTERED
(
[email] 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


DBO.EDITPROFILE

Code Snippet

CREATE TABLE [dbo].[editprofile](
[editprofileid] [int] IDENTITY(1,1) NOT NULL,
[headline] [varchar](50) NULL,
[aboutme] [text] NULL,
[userid] [int] NOT NULL,
[date] [datetime] NOT NULL,
[interests] [text] NULL,
CONSTRAINT [PK_EditProfile] PRIMARY KEY CLUSTERED
(
[date] ASC,
[userid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]







Re: The INSERT statement conflicted with the FOREIGN KEY constraint FK_source_destination.

Arnie Rowland

You need to do the same thing on the other tables.

The FK CONSTRAINT must be on the table that requires data to be in [Users].

You have it backwards, requiring data to be in the other tables before it can be put into [Users].

Remove these CONSTRAINTs from [Users], and add them to the appropriate table.

ALTER TABLE [dbo].[users] WITH NOCHECK ADD CONSTRAINT [FK_users_lastlogin] FOREIGN KEY([userid])
REFERENCES [dbo].[lastlogin] ([userid])
GO

ALTER TABLE [dbo].[users] WITH NOCHECK ADD CONSTRAINT [FK_users_precedence] FOREIGN KEY([userid])
REFERENCES [dbo].[precedence] ([userid])
GO

ALTER TABLE [dbo].[users] WITH NOCHECK ADD CONSTRAINT [FK_users_savedsearches] FOREIGN KEY([userid])
REFERENCES [dbo].[savedsearches] ([userid])
GO

ALTER TABLE [dbo].[users] WITH NOCHECK ADD CONSTRAINT [FK_users_userphotos] FOREIGN KEY([userid])
REFERENCES [dbo].[userphotos] ([userid])
GO

And then if you get erros on adding data to these tables, it will be because the [UserID] does not exists in the [Users] table.






Re: The INSERT statement conflicted with the FOREIGN KEY constraint FK_source_destination.

pbd22


"And then if you get erros on adding data to these tables, it will be because the [UserID] does not exists in the [Users] table."

Ah... silly me. Yes, that was it. Thanks again Arnie.

Cheers,
Peter