2也可以不用触发器,用存储过程也可以。
页面点击删除,调用一个存储过程。 存储过程中把两个delete语句写在一起。
delete from student ....
delete from grade ....
commit (这两句就相当于一个事务)
异常处理中写rollback,以防有问题删除不成功可以回滚。
建立一个临时表,有两列,一列用来记录在A里的主键值,另一列记录在B里的主键值,然后停止主外键关系,导入数据,根据临时表的记录,更新级联表里的外键值=新的主键值。举个例子:
A:主键1,2,3,6
B:主键1,3,5
主键表数据合并后,B的主键是1,3,5,6(A的2),7(A的6)
临时表记录的是(2,6)和(6,7)两条记录
然后更新级联表级联字段,=2的更新为6,=6的更新为7
最后再加上主外键关系。
如果有多个有主键表,每个表都要做这么一遍,记得新导入一个主键表时,临时表要清空。
或者,如果能在B的表先去掉主键自增,然后把A的主键表数据原样导入B,此时B的主键表里和A的主键编号就是一样的了,再导入级联表,然后恢复主键自增就更好了。不过我不会ACCESS,不知道去掉主键自增能不能做得到。第一个办法的原理应该是可行的,放在任何一种库上都行。
不太明白:循环添加到另一张表的某一字段 是什么意思?是指把结果集的多个字段值,添加到另一张的一个字段?若是的话:要把从几张级联表中查询出的结果集各字段转换成另一张表的字段类型,插入就可以,示例如下
insert into tbl4(e)
select a||b||c||d from tbl1,tbl2,tbl3
where tbl1.key1=tbl2.key1 and tbl1.key2=tbl3.key2
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)