我有权访问数据库并希望使用Visual Studio 2015 SQL工具将其复制到本地PC(使用模式和数据)。SQL Server:现有数据的外键问题
我复制架构,数据库有2个表:Menus
(MenuId
是主键)和UsersMenuPlans
(Breakfast
是外键MenuId
,约束有名字FK__UsersMenu__Break__0307610B
)。
但是,当我尝试复制数据,我得到一个错误:
Microsoft Visual Studio
The target database could not be updated because of the following error:
.Net SqlClient Data Provider:
Msg 547, Level 16, State 0, Line 37
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK__UsersMenu__Break__0307610B". The conflict occurred in database "MealGenius", table "dbo.Menus", column 'MenuId'.Last executed command: DECLARE @pv binary(16)
INSERT INTO [dbo].[UsersMenuPlans] ([UserMenuPlanId], [UserId], [Date], [Breakfast], [MidMorningSnack], [Lunch], [MidAfternoonSnack], [Dinner], [MidNightSnack], [BreakfastShort], [LunchShort], [DinnerShort], [Dessert], [GreenDrink], [Probiotic], [Snack1Short], [Snack2Short]) VALUES (33522, 59, '20160801 00:00:00.000', 823, 536, 155, 943, 920, 536, NULL, NULL, NULL, NULL, NU (Command was truncated to fit in message box.)
据我了解,在UsersMenuPlans
一些记录有值Breakfast
,这不Menus
表,MenuId
列存在,因此SQL工具不能复制它。怎么可能?本地服务器上
菜单表具有完全相同的数据,远程服务器上:
远程服务器是Microsoft SQL Server 2012中 - 11.0.5058.0(X64),局部为Microsoft SQL Server 2014( SP1-CU7)(KB3162659) - 12.0.4459.0(X64)
Script是:上线上发生
SET NUMERIC_ROUNDABORT OFF
GO
SET XACT_ABORT, ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
DECLARE @pv binary(16)
BEGIN TRANSACTION
ALTER TABLE [dbo].[UsersMenuPlans]
DROP CONSTRAINT [FK__UsersMenu__Break__0307610B]
ALTER TABLE [dbo].[UsersMenuPlans]
DROP CONSTRAINT [FK__UsersMenu__MidMo__03FB8544]
ALTER TABLE [dbo].[UsersMenuPlans]
DROP CONSTRAINT [FK__UsersMenu__Lunch__04EFA97D]
ALTER TABLE [dbo].[UsersMenuPlans]
DROP CONSTRAINT [FK__UsersMenu__MidAf__05E3CDB6]
ALTER TABLE [dbo].[UsersMenuPlans]
DROP CONSTRAINT [FK__UsersMenu__Dinne__06D7F1EF]
ALTER TABLE [dbo].[UsersMenuPlans]
DROP CONSTRAINT [FK__UsersMenu__MidNi__07CC1628]
SET IDENTITY_INSERT [dbo].[UsersMenuPlans] ON
INSERT INTO [dbo].[UsersMenuPlans] ([UserMenuPlanId], [UserId], [Date], [Breakfast], [MidMorningSnack], [Lunch], [MidAfternoonSnack], [Dinner], [MidNightSnack], [BreakfastShort], [LunchShort], [DinnerShort], [Dessert], [GreenDrink], [Probiotic], [Snack1Short], [Snack2Short])
VALUES (1, 77, '20090407 00:00:00.000', 32, NULL, 13, 82, 15, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
INSERT INTO [dbo].[UsersMenuPlans] ([UserMenuPlanId], [UserId], [Date], [Breakfast], [MidMorningSnack], [Lunch], [MidAfternoonSnack], [Dinner], [MidNightSnack], [BreakfastShort], [LunchShort], [DinnerShort], [Dessert], [GreenDrink], [Probiotic], [Snack1Short], [Snack2Short])
VALUES (2, 77, '20090408 00:00:00.000', 32, NULL, 13, 82, 15, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
INSERT INTO [dbo].[UsersMenuPlans] ([UserMenuPlanId], [UserId], [Date], [Breakfast], [MidMorningSnack], [Lunch], [MidAfternoonSnack], [Dinner], [MidNightSnack], [BreakfastShort], [LunchShort], [DinnerShort], [Dessert], [GreenDrink], [Probiotic], [Snack1Short], [Snack2Short])
VALUES (3, 77, '20090409 00:00:00.000', 12, NULL, 15, 82, 13, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
...
SET IDENTITY_INSERT [dbo].[UsersMenuPlans] OFF
ALTER TABLE [dbo].[UsersMenuPlans]
ADD CONSTRAINT [FK__UsersMenu__Break__0307610B]
FOREIGN KEY ([Breakfast]) REFERENCES [dbo].[Menus] ([MenuId])
ALTER TABLE [dbo].[UsersMenuPlans]
ADD CONSTRAINT [FK__UsersMenu__MidMo__03FB8544]
FOREIGN KEY ([MidMorningSnack]) REFERENCES [dbo].[Menus] ([MenuId])
ALTER TABLE [dbo].[UsersMenuPlans]
ADD CONSTRAINT [FK__UsersMenu__Lunch__04EFA97D]
FOREIGN KEY ([Lunch]) REFERENCES [dbo].[Menus] ([MenuId])
ALTER TABLE [dbo].[UsersMenuPlans]
ADD CONSTRAINT [FK__UsersMenu__MidAf__05E3CDB6]
FOREIGN KEY ([MidAfternoonSnack]) REFERENCES [dbo].[Menus] ([MenuId])
ALTER TABLE [dbo].[UsersMenuPlans]
ADD CONSTRAINT [FK__UsersMenu__Dinne__06D7F1EF]
FOREIGN KEY ([Dinner]) REFERENCES [dbo].[Menus] ([MenuId])
ALTER TABLE [dbo].[UsersMenuPlans]
ADD CONSTRAINT [FK__UsersMenu__MidNi__07CC1628]
FOREIGN KEY ([MidNightSnack]) REFERENCES [dbo].[Menus] ([MenuId])
COMMIT TRANSACTION
错误:
ALTER TABLE [dbo].[UsersMenuPlans]
ADD CONSTRAINT [FK__UsersMenu__Break__0307610B]
FOREIGN KEY ([Breakfast]) REFERENCES [dbo].[Menus] ([MenuId])
错误是:
Msg 547, Level 16, State 0, Line 380
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK__UsersMenu__Break__0307610B". The conflict occurred in database "MealGenius", table "dbo.Menus", column 'MenuId'.
ADDED
我已经执行的脚本:
SELECT p.Breakfast, m.MenuId FROM [UsersMenuPlans] p LEFT OUTER JOIN Menus m on p.Breakfast = m.MenuId where m.MenuId is null
,正如我所料,存在着一些记录(其中p。早餐是'0'值)。但是如何启用外键可以存在这样的表?
正在执行什么ALTER TABLE命令? –
我已将脚本添加到我的问题 –
您是先复制菜单数据然后添加约束?当然 – JamieD77