Ошибка ограничения первичного ключа ограничения внешнего ключа - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь отбросить и воссоздать ограничение внешнего ключа, но получаю ошибку

В ссылочной таблице «инвентарь» нет первичных ключей или ключей-кандидатов, соответствующих списку столбцов ссылокво внешнем ключе '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 голосов
/ 22 декабря 2018

Как вы упомянули в комментариях, у вас есть 2 столбца первичного ключа в таблице Inventory:

один - 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

Надеюсь, это может помочь вам ..

...