尽管我认为我的表正确地引用了主键,但我还是收到了这个错误。Constituent_Gift表引用了5个外键,但仅触发Gift表的此错误。我不明白为什么"类别"表会起作用,但"礼物"表不会。确切的错误消息是:
Msg 547,Level 16,State 0,Line 12
INSERT语句与FOREIGN KEY约束冲突"fk_giftid";。冲突发生在数据库"中;SusanCurtis";,表";dbo。Gift";,列"Gift_ID"。
代码:
CREATE TABLE Category
(
Category_ID NCHAR(4) CONSTRAINT pk_categoryid PRIMARY KEY,
Category_Description NVARCHAR(50) CONSTRAINT nn_categorydescription NOT NULL
);
CREATE TABLE Gift
(
Gift_ID NCHAR(1) CONSTRAINT pk_giftid PRIMARY KEY,
Gift_Description NVARCHAR(20) CONSTRAINT nn_giftdescription NOT NULL,
);
CREATE TABLE Constituent_Gift
(
Constituent_Gift_ID NCHAR(6) CONSTRAINT pk_constituentgift PRIMARY KEY,
Constituent_ID NCHAR(6) CONSTRAINT fk_constituentid FOREIGN KEY
REFERENCES Constituent(Constituent_ID),
Gift_ID NCHAR(1) CONSTRAINT fk_giftid FOREIGN KEY
REFERENCES Gift(Gift_ID),
Fund_ID NCHAR(4) CONSTRAINT fk_fundid FOREIGN KEY
REFERENCES Fund(Fund_ID),
Event_ID NCHAR(2) CONSTRAINT fk_eventid FOREIGN KEY
REFERENCES [Event](Event_ID),
Category_ID NCHAR(4) CONSTRAINT fk_categoryid FOREIGN KEY
REFERENCES Category(Category_ID),
Note NVARCHAR(2000),
Gift_Amount MONEY CONSTRAINT nn_giftamount NOT NULL,
Deductible_Amount MONEY,
Gift_Date Date,
Payment_Type NVARCHAR(30),
Anonymous_Gift BIT
);
有人知道为什么会发生这种事吗?
好吧,错误消息真的说明了一切:很明显,INSERT
(不幸的是,您没有显示(试图插入一个违反外键约束fk_giftid
的值,即Constituent_Gift.Gift_ID
和Gift.Gift_ID
之间的外键,这意味着您试图在Constituent_Gift
中插入一行,其中Gift_ID
的值在引用的Gift
表中不存在。
这就是外键约束的整点-确保只有插入有效数据,该数据存在于引用表中(此处为Gift
(。
将该值固定为在Gift
表中存在的值,您应该会没事的。
您要插入哪些数据?我还错过了表"组成"的架构
Constituent_ID NCHAR(6) CONSTRAINT fk_constituentid FOREIGN KEY
REFERENCES Constituent(Constituent_ID),