For all tables in the db the fk are working but for this one.
CREATE TABLE Sales.SpecialOfferProduct
(
SpecialOfferID INT NOT NULL,
ProductID INT NOT NULL,
rowguid uniqueidentifier NOT NULL,
ModifiedDate DATETIME NOT NULL
PRIMARY KEY(SpecialOfferID, ProductID)
)
I'm trying to connect to the next table:
CREATE TABLE Sales.SalesOrderDetail
(
SalesOrderID INT FOREIGN KEY REFERENCES
Sales.SalesOrderHeader(SalesOrderID),
SalesOrderDetailID INT NOT NULL,
ProductID INT
FOREIGN KEY REFERENCES Sales.SpecialOfferProduct(ProductID),
SpecialOfferID INT
FOREIGN KEY REFERENCES Sales.SpecialOfferProduct(SpecialOfferID),
CarrierTrackingNumber NVARCHAR(25),
OrderQty SMALLINT NOT NULL,
UnitPrice MONEY NOT NULL,
UnitPriceDiscount MONEY NOT NULL,
LineTotal INT NOT NULL,
rowguid uniqueidentifier NOT NULL,
ModifiedDate DATETIME NOT NULL
PRIMARY KEY(SalesOrderID, SalesOrderDetailID)
)
This is the message I get when i try to run the code
Msg 1776, Level 16, State 0, Line 132
There are no primary or candidate keys in the referenced table 'Sales.SpecialOfferProduct' that match the referencing column list in the foreign key 'FK__SalesOrde__Produ__5812160E'.
1条答案
按热度按时间nfs0ujit1#
The error message is quite clear. You try to reference the column
ProductID
only in your first foreign key, but there is no corresponding primary key that only uses this column.There is only one for the combination of the two columns
SpecialOfferID
andProductID
.Then the same issue appears for your attempt to create a foreign key for the column
SpecialOfferID
only.You can fix this by first adding the two columns without keys and then afterwards apply a foreign key on both columns:
Pay attention to use the same order of the affected columns in both primary key and foreign key. If your primary key puts the
SpecialOfferID
first:PRIMARY KEY(SpecialOfferID, ProductID)
, your foreign key must also do that.If you try to do something like this:
FOREIGN KEY (ProductID, SpecialOfferID) REFERENCES SpecialOfferProduct(ProductID, SpecialOfferID)
, you will get an error message again.That's why I also changed the order of the columns in the create table command, so they match the order in the create table command of the referenced table.