例如下面我建的一个课程表Course,其中Cpno是外码,被参照表是Course本身,被参照列是Cnocreate table Course
(Cno char(9) primary key,
Cname char(20),
Cpno char(4),
Ccredit smallint,
foreign key Cpno references Course(Cno)
);当要插入数据时,Cpno必需参照Cno,所以好像存在一个问题,例如插入一个元组: insert into Course
values('1','数据库','5','4');因为第三个'5'必须参照主码Cno,要想插入主码为'5'的元组,则必须知道它的Cpno,如此下去,就是一直持续了,
后来想了一下下面的插入语句,将其得Cpno设置为空,但它参照的主码取值唯一且不空,所以还是错误的。请大家帮忙考虑一下,不胜感激……
(Cno char(9) primary key,
Cname char(20),
Cpno char(4),
Ccredit smallint,
foreign key Cpno references Course(Cno)
);当要插入数据时,Cpno必需参照Cno,所以好像存在一个问题,例如插入一个元组: insert into Course
values('1','数据库','5','4');因为第三个'5'必须参照主码Cno,要想插入主码为'5'的元组,则必须知道它的Cpno,如此下去,就是一直持续了,
后来想了一下下面的插入语句,将其得Cpno设置为空,但它参照的主码取值唯一且不空,所以还是错误的。请大家帮忙考虑一下,不胜感激……
(Cno char(9) primary key,
Cname char(20),
Cpno char(4),
Ccredit smallint--,
--foreign key Cpno references Course(Cno)
);
GO
create trigger my_tr on Course
for insert,update
as
if not exists(
select top 1 1 from inserted i
where exists(
select top 1 1 from Course
where Cpno=i.Cno
)
)
begin
raiserror('您插入的值不在Cno范围内,请重新输入!',16,1)
rollback
end
go