小编Dow*_*pie的帖子

外键约束违规问题

我已经确定了 3 种情况。

  1. 一个没有注册的学生。
  2. 有注册但没有成绩的学生。
  3. 有注册和成绩的学生。

注册表上有一个触发器来计算 GPA。如果学生有成绩,它会更新或在 GPA 表中插入一个条目;没有成绩,没有 GPA 表条目。

我可以删除没有注册的学生(#1)。我可以删除一个有注册和成绩的学生(上面的#3)。但是我不能删除有注册但没有成绩的学生(#2)。我得到了一个参考约束违规。

DELETE 语句与 REFERENCE 约束“FK_dbo.GPA_dbo.Student_StudentID”冲突。冲突发生在数据库“”、表“dbo.GPA”、“StudentID”列中。

如果我无法删除没有注册(也没有 GPA 条目)的新学生,那么我会理解约束违规,但我可以删除该学生。这是一个注册但没有成绩(仍然没有 GPA 条目)的学生,我无法删除。

我已经修补了我的触发器,所以我可以继续前进。现在,如果您有注册,无论如何触发器都会将您插入 GPA 表中。但我不明白潜在的问题。任何解释将不胜感激。

物有所值:

  1. Visual Studio 2013 专业版。
  2. IIS express(VS2013 内部)。
  3. 使用 EntityFramework 6.1.1 的 ASP.NET Web 应用程序。
  4. MS SQL Server 2014 企业版。
  5. GPA.Value 可以为空。
  6. Enrollment.GradeID 可以为空。

这是数据库的一个片段:

数据库图像

--编辑--

这些表都是由 EntityFramework 创建的,我使用 SQL Server Management Studio 来生成这些表。

以下是带有约束的创建表语句。:

GPA 桌子:

CREATE TABLE [dbo].[GPA](
    [StudentID] [int] NOT NULL,
    [Value] [float] NULL,
  CONSTRAINT [PK_dbo.GPA] PRIMARY KEY CLUSTERED 
  ( …
Run Code Online (Sandbox Code Playgroud)

sql-server constraint

10
推荐指数
1
解决办法
2万
查看次数

标签 统计

constraint ×1

sql-server ×1