2017-02-03 7 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はキーのための貧しい選択のように思えます。次に、先にメンターを挿入する必要があります。既にメンターを挿入していない限り、メンターが記入された人を挿入することはできません。メンターがメンターを持っている場合は、まずメンターを挿入する必要があります。 – 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を意味します。彼らは同じではありません。
  • 値が数値の場合は、一重引用符で囲まないでください。
関連する問題