我的外键没有自动增量

时间:2018-01-28 19:44:22

标签: sql sql-server

我正在我的学校项目中工作,我想让任何学生的id主题自动增加为外键。我告诉你下面的例子作为原型,有两个表,当我试图将数据插入第二个表时,我得到一个错误(需要插入表的另一个字段id)

CREATE DATABASE database1;

USE database1;

CREATE TABLE table1 
(
    IdTable1 INT NOT NULL IDENTITY,
    NOM VARCHAR(30),
    PRIMARY KEY(IDMEDO)
);

--auto increment is working here 
INSERT INTO table1 
VALUES ('data1Table1'), ('data2Table1'), ('data3Table1');

--auto increment is working here just with the primary key
CREATE TABLE table2
(
    IdTable2 INT not null IDENTITY,
    IdTable1 INT,
    dataTable2 varchar(30),
    primary key(IdTable2),
    constraint fk_tbl1 foreign key(IdTable1) references Table1
);

--necessary to add id field          
INSERT INTO table2 
VALUES ('data1Table2'), ('data2Table2'), ('data3Table2');

2 个答案:

答案 0 :(得分:0)

如果输入一个不在表1列中作为外键的值,那么现在需要将外键wrt的值插入到表1中,然后它也不会接受

简单

  • 主键和外键应匹配
  • 如果表1不包含值为null的主键
  • ,则外键不能为空

答案 1 :(得分:0)

您应始终(作为“最佳做法”)定义要插入数据的列 - 这样,您可以指定必须为其提供值的那些,并让SQL Server处理其他人。对于外键,您必须显式地提供一个值 - 没有“自动魔术”(或“自动递增”)方式将子行与其父表关联 - 必须在INSERT声明中提供值。

所以将代码更改为:

-- explicitly *specify* the NOM column here!
INSERT INTO table1 (NOM)
VALUES ('data1Table1'), ('data2Table1'), ('data3Table1');

-- again: explicitly *specify* the columns you want to insert into!
INSERT INTO table2 (IdTable1, dataTable2)
VALUES (1, 'data1Table2'), (2, 'data2Table2'), (3, 'data3Table2');