【问题标题】:Trouble Referencing Two-part Primary Key in SQL Server在 SQL Server 中引用两部分主键时遇到问题
【发布时间】:2015-12-13 21:12:53
【问题描述】:

我用一个由两部分组成的主键创建了这个表:

Create Table Part
    (PartNumber         Int             Not Null,
    VendorNumber        Int             Not Null References Vendor(VendorNumber),
    PartDescription     VarChar(100)    Not Null,
    UnitPrice           Money           Not Null,
    MTDSales            Money           Not Null,
    YTDSales            Money           Not Null,
    UnitsOnHand         Int             Not Null,
    UnitsAllocated      Int             Not Null,
    ReorderPoint        Int             Not Null,
    VendorPrice         Money           Not Null,
    MinimumOrderQuantity Int            Not Null,
    ExpectedLeadTime    Datetime        Not Null,
    Primary Key (PartNumber, VendorNumber))

另一个表正在引用 Part 表的主键:

Create Table OrderDetail
(OrderNumber        Int             Not Null References Orders(OrderNumber),
SEQNumber           Int             Not Null,
PartNumber          Int             Not Null References Part(PartNumber),
VendorNumber        Int             Not Null References Part(VendorNumber),
NumberOrdered       Int             Not Null,
QuotedPrice         Money           Not Null,
LineTotal           Int             Not Null,
Comments            VarChar(100)    Not Null,
Primary Key (OrderNumber, SEQNumber))

运行程序时,返回如下错误:

消息 1776,第 16 级,状态 0,第 99 行 引用表“Part”中没有与外键“FK__OrderDeta__PartN__239E4DCF”中的引用列列表匹配的主键或候选键。

谁能提供有关如何解决缺少主键错误的建议?

【问题讨论】:

    标签: sql sql-server foreign-keys primary-key composite-primary-key


    【解决方案1】:

    您需要创建一个复合外键,而不是两个单列键。您可以在create table 中将其作为单独的constraint

    Create Table OrderDetail
    (
        OrderNumber         Int             Not Null References Orders(OrderNumber),
        SEQNumber           Int             Not Null,
        PartNumber          Int             Not Null,
        VendorNumber        Int             Not Null,
        NumberOrdered       Int             Not Null,
        QuotedPrice         Money           Not Null,
        LineTotal           Int             Not Null,
        Comments            VarChar(100)    Not Null,
        Primary Key (OrderNumber, SEQNumber),
        constraint FK_OrderDetail_Part foreign key (PartNumber,VendorNumber) 
                                       references Part (PartNumber,VendorNumber)
    )
    

    【讨论】:

    • 谢谢,这成功了!我还尝试删除“约束”关键字,这似乎没有影响查询。 “约束”有必要吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2016-12-26
    相关资源
    最近更新 更多