我正在尝试插入具有外键的数据。我能够使用GUID更新前两个表,但我在最后3个表中无法更新我想要更新
BEGIN TRANSACTION;
DECLARE @myid uniqueidentifier
SET @myid = NEWID()
INSERT INTO [SERVER].[DB].[Pod] (id)
VALUES (@myid)
INSERT INTO [SERVER].[DB].[RackPattern] ([id])
VALUES (@myid)
INSERT INTO [SERVER].[DB].[PhysicalServer] ([serialNumber], [rackPosition],[Rack_id], id)
VALUES ('2327', '25', 'DBedc1001r01', @myid)
INSERT INTO [SERVER].[DB].[Rack] ([Site_id], [Pod_id], [RackPattern_id], id)
VALUES ('Datacenter','PostionID', 'RACK_PATTERN_ID_1', @myid)
INSERT INTO [SERVER].[DB].[Site] (Pod_id, id)
VALUES ('PostionID', @myid)
COMMIT;
结果:
(1 row(s) affected)
(1 row(s) affected)
Msg 547,Level 16,State 0,Line 11
INSERT语句与FOREIGN KEY约束“FK__PhysicalS__Rack___00DF2177”冲突。冲突发生在数据库“VCO01-A_PATTERN_DB”,表“DB.Rack”,列'id'中。Msg 547,Level 16,State 0,Line 14
INSERT语句与FOREIGN KEY约束“FK__Rack__Site_id__6BE40491”冲突。冲突发生在数据库“VCO01-A_PATTERN_DB”,表“DB.Site”,列“id”中。Msg 547,Level 16,State 0,Line 17
INSERT语句与FOREIGN KEY约束“FK__Site__Pod_id__4F47C5E3”冲突。冲突发生在数据库“VCO01-A_PATTERN_DB”,表“DB.Pod”,列“id”中。
答案 0 :(得分:0)
好吧,你在第三个语句中向PhysicalServer
插入了一些内容,引用了具有特定ID的Rack
- 但Rack
表中的插入只发生在第四个语句 - 这样当您运行第三个SQL语句时Rack.Id
还没有(还)存在!对于第五个语句也是如此 - 您使用Site
插入id
- 但您已在第四个语句中引用该表....
这只是以正确的顺序插入的问题 - 试试这个:
BEGIN TRANSACTION;
DECLARE @myid uniqueidentifier
SET @myid = NEWID()
INSERT INTO [SERVER].[DB].[Pod] (id)
VALUES (@myid)
INSERT INTO [SERVER].[DB].[RackPattern] ([id])
VALUES (@myid)
-- insert into SITE
INSERT INTO [SERVER].[DB].[Site] (Pod_id, id)
VALUES ('PostionID', @myid)
-- insert into RACK, referencing the SITE
INSERT INTO [SERVER].[DB].[Rack] ([Site_id], [Pod_id], [RackPattern_id], id)
VALUES ('Datacenter', 'PostionID', 'RACK_PATTERN_ID_1', @myid)
-- NOW you can insert into "PhysicalServer" which references the rack ...
INSERT INTO [SERVER].[DB].[PhysicalServer] ([serialNumber], [rackPosition],[Rack_id], id)
VALUES ('2327', '25', 'DBedc1001r01', @myid)
COMMIT;
但是还有可疑的东西......
在第三个声明中,您在Site
中插入了一些id
,其中包含您创建的此GUID。然而,在第四个声明中,您引用SiteId
作为数据中心' ......有些事情还没有......