You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中外键关联失败求助:无法关联SpecialOfferProduct表

解决Sales.SalesOrderDetail表外键关联失败问题

问题原因

Sales.SpecialOfferProduct表的主键是复合主键(SpecialOfferID, ProductID),只有这两个字段的组合才是该表记录的唯一标识。而当前Sales.SalesOrderDetail表中,分别给ProductID和SpecialOfferID单独创建外键,不符合外键规则:外键必须关联到父表的主键或候选键(唯一约束列),单独的ProductID或SpecialOfferID在Sales.SpecialOfferProduct中并非唯一字段,因此触发报错。

修正方案

将ProductID和SpecialOfferID作为复合外键关联到Sales.SpecialOfferProduct的复合主键,而非单独创建外键。修改后的建表语句如下:

CREATE TABLE Sales.SalesOrderDetail
(
    SalesOrderID INT FOREIGN KEY REFERENCES Sales.SalesOrderHeader(SalesOrderID),
    SalesOrderDetailID INT NOT NULL,
    ProductID INT NOT NULL,
    SpecialOfferID INT NOT NULL,
    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),
    -- 复合外键关联父表的复合主键
    FOREIGN KEY (SpecialOfferID, ProductID) REFERENCES Sales.SpecialOfferProduct(SpecialOfferID, ProductID)
)

关键说明

  • 移除原表中针对ProductID、SpecialOfferID的单独外键定义
  • 新增复合外键,同时关联两个字段,匹配父表的复合主键结构
  • 将ProductID和SpecialOfferID设为NOT NULL,与父表主键的非空约束保持一致

内容的提问来源于stack exchange,提问作者taray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:42:15