我想通过外键 - 二元和一元关系连接不同的表。
例如:
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()”是我的选择吗?连接表的值是否自动匹配?
答案 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和Tab3INSERT INTO Tab1(Id, Tab2Id) VALUES(1, @Tab2Id);
INSERT INTO Tab3(Id, Tab2Id) VALUES(1, @Tab2Id);
(或者您也可以为Tab1和Tab3 Id
列指定IDENTITY列,但请注意,在将Tab2 id插入其他表之前,您仍然需要先插入Tab2。