2017-02-03 40 views
0
create table STAFF 
(
    StaffID TINYINT IDENTITY NOT NULL, 
    StaffName varchar(20) NOT NULL, 
    Phone  varchar(10) NOT NULL, 
    Gender  char(01), 
    DoB  date NOT NULL, 
    Mentor  TINYINT, 
    Payment_ID TINYINT NOT NULL, 

    constraint staff_pk primary key (StaffID), 
    constraint staff_fk 
     foreign key (Payment_ID) references PAYMENT(Payment_ID), 
    constraint mentor_fk 
     foreign key (Mentor) references staff(StaffID) 
); 

表已成功創建。但是,當我要插入值是這樣的:我已經創建了一個職員表。它有自己的參考密鑰

insert into STAFF 
values ('Adeesha', '077282018', 'M', '1997-11-30', '', '5'), 
     ('Kavitha', '0772556899', 'F', '1956-11-28', '', '4'), 
     ('Patee Aiya', '0775669844', 'M', '1954-01-04', '', '3'), 
     ('Chanuka', '0772562984', 'M', '1997-02-24', '', '2'), 
     ('Umesha', '0723328284', 'F', '1997-11-26', '', '3'); 

我得到以下錯誤:

Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the FOREIGN KEY SAME TABLE constraint "mentor_fk".
The conflict occurred in database "F_T", table "dbo.STAFF", column 'StaffID'.

+4

首先,TINYINT似乎是一個關鍵的不好的選擇。其次,你需要先插入導師。除非您已經插入導師,否則您不能插入任何導師已填寫的人。如果指導者ALSO有指導者,則需要先插入指導者,直到您插入沒有指導者(NULL)的人爲止。 – pmbAustin

回答

3

空字符串('')是不一樣的NULL。您應該使用NULL

insert into STAFF(StaffName, Phone, Gender, DoB, Mentor, Payment_ID) 
    values ('Adeesha', '077282018', 'M', '1997-11-30', NULL, 5), 
      ('Kavitha', '0772556899', 'F', '1956-11-28', NULL, 4), 
      ('Patee Aiya', '0775669844', 'M', '1954-01-04', NULL, 3), 
      ('Chanuka', '0772562984', 'M', '1997-02-24', NULL, 2), 
      ('Umesha', '0723328284', 'F', '1997-11-26', NULL, 3); 

注:

  • 當使用insert,列出被插入到表中的所有列。這是一種最佳做法。
  • 請勿插入identity列。它是自動生成的。
  • 使用NULL表示NULL而不是空字符串。他們不一樣。
  • 如果一個值是一個數字,不要用單引號括起來。
相關問題