【问题标题】:The INSERT statement conflicted with the FOREIGN KEY SAME TABLE constraintINSERT 语句与 FOREIGN KEY SAME TABLE 约束冲突
【发布时间】:2014-09-08 20:06:21
【问题描述】:

我已经创建了表Employee

Create table Employee
(   
    FName varchar(20) Not Null,
    LName varchar(20) Not Null,
    SSN int Not Null,
    BDate Datetime,
    Address varchar(50),
    Sex char(1),
    Salary money,
    Super_SSN int,
    Primary Key(SSN),
    Foreign Key(Super_SSN) references Employee(SSN)
)

当我尝试插入第一行时,

insert into Employee(FName,LName,SSN,BDate,Address,Sex,Salary,Super_SSN)
values('John','Smith',12345,'1965-01-09','Houston,TX','M',30000,33344) 

我收到类似的错误..

错误:

INSERT 语句与 FOREIGN KEY SAME TABLE 约束“FK_Employee_Employee”冲突。冲突发生在数据库“Company”、表“dbo.Employee”、列“SSN”中。

【问题讨论】:

  • 表中是否已经存在 33344 的 SSN(取自您的示例)? (已对您的格式问题进行了编辑)
  • 不,这是该表中的第一行
  • super_ssn 列可以是null 还是必须一直填写?
  • 那么它当然会失败。您的外键约束表示表中必须存在该值。它不能在表格中,因为您要插入第一行。
  • 请告知 SSN 是一个非常糟糕的缩写,它不是社会安全号码。更重要的是,请告诉我社保号不是主键。

标签: sql sql-server foreign-keys


【解决方案1】:

这个错误很可能是因为从Super_SSNSSN 列有一个外键。您不能将值33344 插入Super_SSN,除非该值已存在于SSN 中。尝试将null 插入Super_SSN 或先插入用户33344

【讨论】:

    【解决方案2】:

    您需要先为 SSN '33344' 插入记录,Super_SSN 值为 NULL

    INSERT INTO  Employee(FName,LName,SSN,BDate,Address,Sex,Salary,Super_SSN)
    VALUES (<FName>,<LName>,'33344',<BDate>,<Address>,<Sex>,<Salary>,NULL)
    

    之后插入

    INSERT INTO Employee (FName,LName,SSN,BDate,Address,Sex,Salary,Super_SSN)
    VALUES ('John','Smith',12345,'1965-01-09','Houston,TX','M',30000,33344)
    

    如果SSN '33344'有任何Super_SSN,更新SSN值(该记录应该在表中可用)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多