22,207
社区成员
发帖
与我相关
我的任务
分享
USE [test]
GO
CREATE TABLE [dbo].[tb_user_info](
[user_num] [int] NOT NULL PRIMARY KEY,
[user_nickname] [varchar](20) NOT NULL,
[stu_num] [int] NULL
CONSTRAINT
FK_tb_user_info_tb_student_info_stu FOREIGN KEY
(
stu_num
) REFERENCES dbo.tb_student_info
(
stu_num
) ON UPDATE NO ACTION
ON DELETE NO ACTION ,
[thr_num] [int] NULL
CONSTRAINT
FK_tb_user_info_tb_teacher_info_thr FOREIGN KEY
(
thr_num
) REFERENCES dbo.tb_teacher_info
(
thr_num
) ON UPDATE NO ACTION
ON DELETE NO ACTION
)
use tempdb
go
Create table tb_student_info(stu_num int primary key)
Create table tb_teacher_info(thr_num int primary key)
insert into tb_student_info values(1);
insert into tb_teacher_info values(2);
go
create function fn_Check_user_num(
@user_num int
)returns bit
as
begin
if exists(select 1 from tb_student_info where stu_num=@user_num)
or exists(select 1 from tb_teacher_info where thr_num=@user_num)
return 1
return 0
end
go
Create table tb_user_info(user_num int primary key check (dbo.fn_Check_user_num(user_num)=1))
go
insert into tb_user_info values(1)--OK
insert into tb_user_info values(2)--OK
insert into tb_user_info values(3)--ERROR
/*
消息 547,级别 16,状态 0,第 1 行
INSERT 语句与 CHECK 约束"CK__tb_user_i__user___4CA06362"冲突。该冲突发生于数据库"tempdb",表"dbo.tb_user_info", column 'user_num'。
语句已终止。
*/
go
select * from tb_user_info
/*
user_num
1
2
*/
create table tb_user_info(
user_num int not null primary key,
user_nickname varchar(20) not NULL,
FOREIGN KEY (user_num) REFERENCES tb_student_info(stu_num ),
FOREIGN KEY (user_num) REFERENCES tb_teacher_info(thr_num )
)