将一张表数据定时插入到另一张表

时间:2022-02-10 21:07:07

之前一直在Java代码中嵌套sql,所以对sql有一个误区,只能一列一列执行,其实sql也可以定义变量,定义函数(存储过程)

在公司实习,需要实现将一张表数据定时插入到另一张表

这里用到了游标sql server的作业

思路:   1.需要运用游标对表记录遍历的功能

              2.需要将需要插入的列定义为变量赋值或者直接常量赋值

             3.在插入时要判断新表中是否已经含有数据,实现增量同步

             4.将sql脚本设置为定时作业  

              sql脚本

             

declare 
@subMark int,
@currentMark varchar(32),
@name varchar(32),
@capitalspec varchar(100);
set @subMark=(select  substring(max(mark),3,7)+1   from CptCapital where mark  like 'sc04%'  and  len(mark)=8)

-- 声明游标
DECLARE c_offOrdMacConfigZhb CURSOR FAST_FORWARD FOR
    select F_124 as name,(F_125+FModel+Fname) as capitalspec from  offOrdMacConfigZhb;

--打开游标
open c_offOrdMacConfigZhb;

--取第一条记录
FETCH NEXT FROM c_offOrdMacConfigZhb INTO @name,@capitalspec;

WHILE @@FETCH_STATUS=0

begin 
      --不存在才执行插入操作
      if not exists(select * from CptCapital where name=@name and capitalspec=@capitalspec and isdata=1)
      begin 
           set @currentMark='SC0'+convert(varchar,@subMark);
            insert into CptCapital(mark,name,departmentid,resourceid,sptcount,currencyid,capitalspec,capitaltypeid,capitalgroupid,unitid,isdata)values(@currentMark,@name,859,8274,1,1,@capitalspec,1,30,1,1);
           set @subMark=@subMark+1;
       end
      -- 取下一条记录
    FETCH NEXT FROM c_offOrdMacConfigZhb INTO @name,@capitalspec;
end

-- 关闭游标
CLOSE c_offOrdMacConfigZhb;

-- 释放游标
DEALLOCATE c_offOrdMacConfigZhb;

                将一张表数据定时插入到另一张表

 

 

其实,sql也并没有想象中那么复杂,熟悉了都一样

        在这里学会了游标的使用