SQL,通过外键连接的表 - 如何使ID号相同?

时间:2016-11-09 16:50:06

标签: sql-server

我想通过外键 - 二元和一元关系连接不同的表。

例如:

  create table[tab2]
(ID INT Not null PRIMARY KEY)


create table[tab1]
(ID INT Not null PRIMARY KEY,
 Tab2ID INT Not null constraint tab1_tab2 foreign key referenes tab2(ID)--binary relation )

create table[tab3]
(ID INT Not null PRIMARY KEY,
tab2ID int Not null unique constraint tab2_tab3 references tab2(ID)) --unary relation

我想给ID-PrimaryKeys一个自动值。我已经尝试过IDENTITY,但是当我想通过visual studio在表格中输入数据时,它没有用。 ID没有得到自动值,没有得到的原因是“NOT NULL”。 并且连接表的via关系列的值必须具有相同的值吗? 我该怎么做?

提前谢谢。 对不起英语知识不足

功能“NEWID()”是我的选择吗?连接表的值是否自动匹配?

1 个答案:

答案 0 :(得分:0)

您需要在Tab2上指定标识列,并确保先插入Tab2。在插入Tab2之前,您将无法插入Tab1或Tab3,bc FK约束将失败(因为您尝试插入的值不存在于Tab2中)。

我认为这是你想要实现的目标:

首先,使用ID列创建Tab2作为标识规范(您需要删除Tab2并使用规范重新创建,或删除列并添加新列):

create table [tab2]
(
    ID INT Not null PRIMARY KEY IDENTITY
)

然后在Tab2中插入一行:

DECLARE @Tab2Id INT;
INSERT Tab2 DEFAULT VALUES;
SELECT @Tab2Id = SCOPE_IDENTITY();

现在,您可以使用Tab2中的新ID

插入Tab1和Tab3
INSERT INTO Tab1(Id, Tab2Id) VALUES(1, @Tab2Id); 
INSERT INTO Tab3(Id, Tab2Id) VALUES(1, @Tab2Id);

(或者您也可以为Tab1和Tab3 Id列指定IDENTITY列,但请注意,在将Tab2 id插入其他表之前,您仍然需要先插入Tab2。