无法将外键连接到 SQL 数据库中的表

问题描述 投票:0回答:1

对于数据库中的所有表,fk 都可以工作,但对于这个表。

CREATE TABLE Sales.SpecialOfferProduct(
            SpecialOfferID INT NOT NULL,
            ProductID INT NOT NULL,
            rowguid uniqueidentifier NOT NULL,
            ModifiedDate DATETIME NOT NULL
            PRIMARY KEY(SpecialOfferID,ProductID)
) 

我正在尝试连接到下一张桌子

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)
)

这是我尝试运行代码时收到的消息

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'.
sql foreign-keys
1个回答
0
投票

错误信息非常清楚。您只想在外键中引用列

ProductID
,但没有对应的仅使用该列的主键。有一个用于两列
SpecialOfferID
ProductID
的组合。 您可以通过首先添加没有键的两列,然后在两列上应用外键来解决此问题:

CREATE TABLE SalesOrderDetail(
               ProductID INT,
               SpecialOfferID INT,
               -- ...further columns... ---
               CONSTRAINT yourConstraint FOREIGN KEY (ProductID,
               SpecialOfferID) REFERENCES
               SpecialOfferProduct(SpecialOfferID, ProductID))
© www.soinside.com 2019 - 2024. All rights reserved.