欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

sql存储过程实例--动态根据表数据复制一个表的数据到另一个表

程序员文章站 2022-03-17 13:13:29
动态根据表数据复制一个表的数据到另一个表 把track表的记录 根据mac_id后两位数字,复制到对应track_? 的表中 如:mac_id=12345678910,...

动态根据表数据复制一个表的数据到另一个表

把track表的记录 根据mac_id后两位数字,复制到对应track_? 的表中

如:mac_id=12345678910,则后两位10 对应表为track_10,就把此记录复制到track_10中

创建一个 sub_track的存储过程实现:

-- 创建一个 名为sub_track的存储过程
create procedure sub_track()
begin
  declare i int;  -- 定义 循环变量i
  set @imei =0;  -- 定义imei最后两位
  set @t_count=0; -- 定义 表有多少条记录变量
  set i=0;
  select count(*)into @t_count from track;        -- 获取表的条数
while i <= @t_count do                   -- 循环
 select right(mac_id,2) into @imei from track order by gpstime desc limit i, 1;  -- 获取 imei 最后两位 
  set @imei =convert(@imei,signed);                       -- 转为数字
  -- sql 语句
  set @sql1=" (
               mac_id,mac_type,channel,type,x,y,gpstime,bvalid,speed,dir,s1,s2,s3,s4,ins_date,imagefile,battery
             ) 
            select 
               mac_id,mac_type,channel,type,x,y,gpstime,bvalid,speed,dir,s1,s2,s3,s4,ins_date,imagefile,battery
            from track 
            order by
              gpstime desc
            limit ";
  set @inset_sql=concat("insert into track_",@imei,@sql1,i,",",1);    -- 拼接完整的插入 sql语句
  prepare insert_track from @inset_sql;                  -- 预编译
  execute insert_track;                          -- 执行sql语句
  set i=i+1;
-- 结束循环
end while;
  commit;
end
-- 执行存储过程
call sub_track();
@flm

总结

以上所述是小编给大家介绍的sql存储过程实例--动态根据表数据复制一个表的数据到另一个表,希望对大家有所帮助