【问题标题】:Insert Values with foreign keys SQL使用外键 SQL 插入值
【发布时间】:2016-05-20 20:40:49
【问题描述】:

我正在尝试插入具有外键的数据。我可以使用 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)  

消息 547,第 16 级,状态 0,第 11 行
INSERT 语句与 FOREIGN KEY 约束“FK__PhysicalS__Rack___00DF2177”冲突。冲突发生在数据库“VCO01-A_PATTERN_DB”、表“DB.Rack”、列“id”中。

消息 547,第 16 级,状态 0,第 14 行
INSERT 语句与 FOREIGN KEY 约束“FK__Rack__Site_id__6BE40491”冲突。冲突发生在数据库“VCO01-A_PATTERN_DB”、表“DB.Site”、列“id”中。

消息 547,第 16 级,状态 0,第 17 行
INSERT 语句与 FOREIGN KEY 约束“FK__Site__Pod_id__4F47C5E3”冲突。冲突发生在数据库“VCO01-A_PATTERN_DB”、表“DB.Pod”、列“id”中。

【问题讨论】:

    标签: sql-server database


    【解决方案1】:

    好吧,您在第三条语句中向PhysicalServer 中插入一些内容,该语句引用具有特定ID 的Rack - 但插入Rack 表仅发生在第四 语句中 -这样Rack.Id 在您运行第三个 SQL 语句时(还)不会出现!第五条语句也是如此 - 你插入了一个 Site 和一个 id - 但你已经在第四条语句中引用了该表....

    只需在此处按正确的顺序插入 - 试试这个:

    开始交易;

    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;
    

    但还是有问题.....

    在第三个语句中,您将带有 id 的内容插入到 Site 中,这就是您创建的 GUID。然而在第四个声明中,您将SiteId 称为“数据中心”......有些事情还不太对......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 2020-08-05
      • 1970-01-01
      相关资源
      最近更新 更多