尝试将记录插入表FK T-SQL出错

本文关键字:FK T-SQL 出错 插入 记录 | 更新日期: 2023-09-27 18:02:27

我正在尝试将新的课本记录插入数据库中。我有一个列为ID(PK(、CourseIDCourseTitleCourse表。

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是自动递增的。

尝试将记录插入表FK T-SQL出错

对于多对多关系,您需要使用三个表,Book表、Course表,然后是中间表-BookCourse表。书本表是指书本课程,课程表是指课本课程。书籍和课程表之间没有直接参考

您首先将book添加到book表中,然后将Course添加到Course表中,最后将这对(CourseID,BookID(添加到BookCourse表。

对于BookCourse表,您可以添加复合主键(CourseID、BookID(,也可以添加标识键BookCourseID,但如果是后者,则需要确保没有重复-您可以创建一个唯一的约束。

https://en.wikipedia.org/wiki/Many-to-many_(data_model(