我正在我的学校项目中工作,我想让任何学生的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');
答案 0 :(得分:0)
如果输入一个不在表1列中作为外键的值,那么现在需要将外键wrt的值插入到表1中,然后它也不会接受
简单
答案 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');