首页 新闻 会员 周边 捐助

SQL如何将将一张表的部分数据查询后插入到另一张表并同时删除从原表查询的数据?

0
悬赏园豆:10 [待解决问题]

SQL将一张表的部分数据查询后插入到另一张表并同时删除从原表查询的数据,比如说是A、A_his两张表,其中A_his是A表的历史表,记录一些历史记录。同时Id,name,scores字段。要将从A表查询出来的部分数据放到历史表A_his中,并要同时删除原表的数据。如何写存储过程,规定凌晨执行!新手求教...急...

ZorroBubble的主页 ZorroBubble | 初学一级 | 园豆:177
提问于:2013-06-17 10:23
< >
分享
所有回答(6)
0

http://bbs.csdn.net/topics/390100496

这个应该跟你描述的差不多

二十三号同学 | 园豆:974 (小虾三级) | 2013-06-17 10:40
-1

事物开始

读出数据,并存放到临时表,

把临时表插入到目标表中

把源表中的数据删除,使用where id in (select id from 临时表)

删除临时表

事物结束

提交事物

只会造轮子 | 园豆:2274 (老鸟四级) | 2013-06-17 14:00
0

步骤一:insert into A_His  select * from A where ...(注意这里的where条件。)

步骤二:delete A where (注意这里的条件要和上文一样)

步骤三:使用SQL Agent定时在0点执行。

幻天芒 | 园豆:37207 (高人七级) | 2013-06-17 14:05
0

没必要这么干啊,A表加个字段标识下就行了,每次将标识列改变下状态就OK了。规定时间执行,可以用SQL计划,安装SQL时注意要选全了,不然出不来,Express版是没有计划的。

happydaily | 园豆:260 (菜鸟二级) | 2013-06-17 15:47
0

学习了

panjk | 园豆:712 (小虾三级) | 2013-07-11 16:48
0

更新历史表内容
mysql> select * from A;
+----+---------+--------+
| Id | name    | scores |
+----+---------+--------+
|  1 | xiaoyi  |     88 |
|  2 | xiaoer  |     89 |
|  3 | xiaosan |     90 |
|  4 | xiaosi  |     91 |
+----+---------+--------+
4 rows in set (0.00 sec)

mysql> select * from A_his;
+----+---------+--------+
| Id | name    | scores |
+----+---------+--------+
|  1 | xiaoyi  |     88 |
|  2 | xiaoer  |     98 |
|  3 | xiaosan |     87 |
|  4 | xiaosi  |     91 |
+----+---------+--------+


drop procedure if exists sp1;
delimiter //
create procedure sp1(a int)
begin
    delete from A_his where Id = a;
    insert into A_his select * from A where Id = a;
    select * from A_his;
end//
delimiter ;
mysql> call sp1(2); -- 显示更新后的A_his 表的内容
+----+---------+--------+
| Id | name    | scores |
+----+---------+--------+
|  1 | xiaoyi  |     88 |
|  2 | xiaoer  |     89 |
|  3 | xiaosan |     87 |
|  4 | xiaosi  |     91 |
+----+---------+--------+
4 rows in set (0.09 sec)

指间沙··· | 园豆:202 (菜鸟二级) | 2013-07-20 11:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册