更改外键约束主键错误

时间:2018-12-21 21:34:05

标签: sql tsql sql-server-2012

我试图删除并重新创建外键约束,但出现错误

  

在引用表“清单”中没有与外键“ fkInventory_VendorsInventory”中的引用列列表相匹配的主键或候选键。

我已经进入代码中所引用的两个表的表设计,并确保所引用的列是主键。

ALTER TABLE inventory_vendors 
    DROP CONSTRAINT fkInventory_VendorsInventory;

ALTER TABLE inventory_vendors
    ADD CONSTRAINT fkInventory_VendorsInventory 
    FOREIGN KEY(itemnum) REFERENCES inventory(itemnum) 
            ON UPDATE CASCADE
            ON DELETE CASCADE

我之前进行过这样的放松和娱乐,而另一组桌子根本没有问题(不幸的是,我不记得它们是哪张桌子)。

1 个答案:

答案 0 :(得分:2)

正如您在评论中提到的,Inventory表中有2个主键列:

  

一个是itemnum,另一个是store_id

我在这里准备一个示例SQL:创建了2个表

CREATE TABLE inventory 
(
    itemnum INT,
    store_id INT,
    inventoryDesc char(200),
    primary key (itemnum, store_id)
);

CREATE TABLE inventory_vendors 
(
    inventory_vendors int,
    itemnum INT,
    store_id INT,
    VendorDetails varchar(200),
    primary key (inventory_vendors)
);

为主键之一创建唯一约束。在这里,我为itemnum列创建唯一约束

ALTER TABLE inventory
ADD CONSTRAINT [IX_inventory] UNIQUE ( [itemnum] )
GO

然后执行脚本以在inventory_vendors列的itemnum上创建外键约束,也可以将其删除。

ALTER TABLE inventory_vendors
    ADD CONSTRAINT fk_Inventory_Vendors_Inventory 
        FOREIGN KEY(itemnum) REFERENCES inventory(itemnum) 
                ON UPDATE CASCADE
                ON DELETE CASCADE

ALTER TABLE inventory_vendors 
    DROP CONSTRAINT fk_Inventory_Vendors_Inventory;

enter image description here

希望这对您有帮助。