我有權訪問數據庫並希望使用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