尝试将记录插入表FK T-SQL出错
本文关键字:FK T-SQL 出错 插入 记录 | 更新日期: 2023-09-27 18:02:27
我正在尝试将新的课本记录插入数据库中。我有一个列为ID
(PK(、CourseID
、CourseTitle
的Course
表。
textBook
表(所有列,ID
(PK((是一种多对多的关系,因此多个课程可以有同一本书,课程也可以有多本不同的书。
当我尝试使用C#将一本新的课本插入数据库时,我的外键出现了错误。Course
表是父表,Textbook
表是子表。两个表中的ID列都设置为标识和自动递增。ID是我的textBook
表中引用Course
表的外键。
这是我的中间桌。
CREATE TABLE [dbo].[BookCourse]
(
[cID] INT NOT NULL Unique,
[BookID] INT NOT NULL Unique,
[BookCourseID] INT NOT NULL,
CONSTRAINT [PK_BookCourse] PRIMARY KEY ([BookCourseID])
)
这是我的课本表
CREATE TABLE [dbo].[textBooks] (
[thirteenISBN] VARCHAR (255) NOT NULL,
[CourseID] VARCHAR (50) NOT NULL,
[BookTitle] VARCHAR (255) NULL,
[Ancillary] VARCHAR (255) NULL,
[BookActive] VARCHAR (20) NULL,
[ActiveDate] VARCHAR (50) NULL,
[InactiveDate] VARCHAR (50) NULL,
[Author] VARCHAR (255) NULL,
[Imprint] VARCHAR (100) NULL,
[Publisher] VARCHAR (100) NULL,
[EditionAndDate] VARCHAR (120) NULL,
[tenISBN] VARCHAR (255) NULL,
[VendorISBN] INT NULL,
[ebookAvailable] VARCHAR (50) NULL,
[eISBN] VARCHAR (255) NULL,
[Notes] VARCHAR (255) NULL,
[BookID] INT IDENTITY (1, 1) NOT NULL,
CONSTRAINT [PK_textBooks] PRIMARY KEY CLUSTERED ([BookID] ASC),
CONSTRAINT [FK_textBooks_ToTable] FOREIGN KEY ([BookID]) REFERENCES [BookCourse]([BookID])
);
这是我的课程表
CREATE TABLE [dbo].[Course] (
[CourseID] VARCHAR (50) NOT NULL,
[CourseTitle] VARCHAR (255) NULL,
[cID] INT IDENTITY (1, 1) NOT NULL,
CONSTRAINT [PK_Course] PRIMARY KEY CLUSTERED ([cID] ASC),
CONSTRAINT [FK_Course_ToTable] FOREIGN KEY ([cID]) REFERENCES [BookCourse]([cID])
);
带插入件的表适配器:
JUTDMSTableAdapters.textBooksTableAdapter bookTableAdapter;
bookTableAdapter = new JUTDMSTableAdapters.textBooksTableAdapter();
JUTDMSTableAdapters.CourseTableAdapter courseTableAdapter;
courseTableAdapter = new JUTDMSTableAdapters.CourseTableAdapter();
courseTableAdapter.Insert( CourseID: txtCourseID.Text, CourseTitle: txtCourseTitle.Text);
bookTableAdapter.Insert( thirteenISBN: txt13ISBN.Text, CourseID: txtCourseID.Text, BookTitle: txtBookTitle.Text, Ancillary: txtAncillary.Text,
BookActive: txtBookActive.Text, ActiveDate: txtActiveDate.Text, InactiveDate: txtInactiveDate.Text, Author: txtAuthor.Text,
Imprint: txtImprint.Text, Publisher: txtPublisher.Text, EditionAndDate: txtEditionDate.Text,
VendorISBN: vendISBN, tenISBN: txt10ISBN.Text, ebookAvailable: txtEBookAvailable.Text, eISBN: txtEISBN.Text, Notes: txtNotes.Text);
我认为在我的Course
表适配器插入中,我不必添加cID列,因为它是自动递增的,但我得到了这个错误:
附加信息:INSERT语句与FOREIGN KEY约束"FK_Course_ToTable"冲突。冲突发生在数据库"F:''HUTDMS V-2.0''HUTDMS V-2.0''APP_DATA''HUTDMS.MDF",表"dbo.BookCourse",列"cID"中。
课本表中的BookID是自动递增的课程表中的cID是自动递增的BookCourse表中的BookCourseID是自动递增的。
对于多对多关系,您需要使用三个表,Book表、Course表,然后是中间表-BookCourse表。书本表是指书本课程,课程表是指课本课程。书籍和课程表之间没有直接参考
您首先将book添加到book表中,然后将Course添加到Course表中,最后将这对(CourseID,BookID(添加到BookCourse表。
对于BookCourse表,您可以添加复合主键(CourseID、BookID(,也可以添加标识键BookCourseID,但如果是后者,则需要确保没有重复-您可以创建一个唯一的约束。
https://en.wikipedia.org/wiki/Many-to-many_(data_model(