INSERT语句与FOREIGN KEY SAME TABLE约束冲突

San*_*DVG 10 sql sql-server foreign-keys

我创建了表 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)
)
Run Code Online (Sandbox Code Playgroud)

当我尝试插入第一行时,

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

我收到的错误就像..

错误:

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

Jes*_*aja 16

您需要首先使用Super_SSN值为SSN'33344'INSERT记录.NULL

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

插入之后

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

如果SSN'33344'有任何Super_SSN更新,则更新SSN值(此记录应在表中提供).


Vul*_*nos 5

可能会引发错误,因为存在来自Super_SSNto SSN列的外键。你不能插入值33344Super_SSN,除非该值已经存在SSN。尝试插入nullSuper_SSN或插入用户33344第一。