【问题标题】:I have created a Staff table. It has a self reference key我创建了一个员工表。它有一个自引用键
【发布时间】:2017-02-04 06:12:34
【问题描述】:
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');

我收到以下错误:

消息 547,第 16 级,状态 0,第 1 行
INSERT 语句与 FOREIGN KEY SAME TABLE 约束“mentor_fk”冲突。
冲突发生在数据库“F_T”、表“dbo.STAFF”、列“StaffID”中。

【问题讨论】:

  • 首先,TINYINT 似乎是一个糟糕的选择。其次,您需要先插入导师。除非您已经插入了导师,否则您无法插入已填写导师的任何人。如果导师也有导师,你需要先插入那个导师,直到你插入没有导师的人(NULL)。

标签: sql sql-server


【解决方案1】:

空字符串 ('') 与 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 而不是空字符串。它们不一样。
  • 如果值是数字,请勿将其括在单引号中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2021-11-28
    • 1970-01-01
    • 2022-10-07
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多