在SQL Server中引用两部分主键时出现问题

时间:2021-11-05 14:20:52

I created this table with a two-part primary key:

我用两部分主键创建了这个表:

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

And another table is referencing the Part table's primary keys:

另一个表引用了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))

When running the program, the following error is returned:

运行该程序时,将返回以下错误:

Msg 1776, Level 16, State 0, Line 99 There are no primary or candidate keys in the referenced table 'Part' that match the referencing column list in the foreign key 'FK__OrderDeta__PartN__239E4DCF'.

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

Could anyone provide suggestions on how to resolve the missing primary key error?

任何人都可以提供有关如何解决丢失的主键错误的建议吗?

1 个解决方案

#1


4  

You need to create one composite foreign key, not two single-column keys. You can do it as a separate constraint in create table:

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

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

#1


4  

You need to create one composite foreign key, not two single-column keys. You can do it as a separate constraint in create table:

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

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