外键是用来实现“引用完整性”的,说白了就是一种约束,不能用来传值。
成都创新互联公司专注于乌翠企业网站建设,响应式网站设计,商城系统网站开发。乌翠网站建设公司,为乌翠等地区提供建站服务。全流程按需求定制制作,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务
可以选择触发器或存储过程。
如果两个表字段相同可以用触发器:
CREATE TRIGGER trigger_AToB on A
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO A(a,b,c) SELECT a,b,c FROM inserted
INSERT INTO B(a,b,c) SELECT a,b,c FROM inserted
END
GO
INSERT INTO a(a,b,c)VALUES('aaa','aaa','aaa')
在查询分析器里执行上面的语句后,向A表添加数据会同时向B表添加。触发器比较方便,缺点是,一旦B表被删除了,向A表添加数据会报错。
存储过程就比较自由了:
CREATE PROC proc_InsertAToB
@a VARCHAR(10),
@b VARCHAR(20),
@c VARCHAR(30)
as
INSERT INTO A(a,b,c)VALUES(@a,@b,@c)
INSERT INTO B(a,b,c)VALUES(@a,@b,@c)
表B的字段和表A不一样也没关系,需要的话,可以再根据需要向存储过程添加参数。
使用的时候不再用INSERT INTO了,用:
EXECUTE proc_InsertAToB 'aaa','aaa','aaa'就可以。
给你做个简单试验吧
创建class表,里边其他字段我就略了
create table class(classid int not null primary key,
classname varchar(20))
创建学生表
create table student(studentid int not null primary key,
studentname varchar(10),
classid int)
添加外键级联删除或更新约束
alter table student add constraint FK_classid foreign key (classid) references class (classid) on update cascade on delete cascade
向class表增加数据
insert into class values (1,'1班')
insert into class values (2,'2班')
向student表增加数据
insert into student values (1,'aa',1)
insert into student values (2,'bb',2)
insert into student values (3,'cc',3) --这条是增加不进去的,会报错
删除class表里一班的数据
delete from class where classid=1
检查 student 表里数据
这个时候你就发现,为1班学生的那数据也同时被删了
如果你用的是SQL2008以后的数据库版本,可以这样
SELECT ROW_NUMBER() OVER (ORDER BY B.HID DESC) BH, B.*
FROM
(SELECT h.[医院名称],k.[科室名称],k.[科室编号],k.id,k.kid
from [医院表] as h right join [科室表] as k on k.hid = h.hid
) B
WHERE BH BETWEEN ($page_size * $page_num) AND ($page_size * $page_num +$page_size)
declare @i int
declare @sql nvarchar(max)
set @i=0
set @sql=''
while @i=288
begin
set @sql=@sql+'select ''13207000101001'' site_code,name,dateadd(mi,' + cast((@i+1)*5 as nvarchar(50))+',[datetime]) test_date,col'+ cast(@i as nvarchar(50))+' test_value from 表A where col'+cast(@i as nvarchar(50))+' '''' union all '
set @i=@i+1
end
set @sql=substring(@sql,1,len(@sql)-10)
set @sql='select * into 表B from ('+ @sql+') a'
exec(@sql)