对于数据库中的所有表,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'.
错误信息非常清楚。您只想在外键中引用列
ProductID
,但没有对应的仅使用该列的主键。有一个用于两列 SpecialOfferID
和 ProductID
的组合。
您可以通过首先添加没有键的两列,然后在两列上应用外键来解决此问题:
CREATE TABLE SalesOrderDetail(
ProductID INT,
SpecialOfferID INT,
-- ...further columns... ---
CONSTRAINT yourConstraint FOREIGN KEY (ProductID,
SpecialOfferID) REFERENCES
SpecialOfferProduct(SpecialOfferID, ProductID))