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

问题描述 投票: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)
)

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

消息 1776,级别 16,状态 0,第 132 行
引用中没有主键或候选键 表 'Sales.SpecialOfferProduct' 匹配 引用外键中的列列表 'FK__SalesOrde__Produ__5812160E'.

sql-server 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.