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


    之前一直在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也并没有想象中那么复杂,熟悉了都一样

            在这里学会了游标的使用

                    

     

  • 相关阅读:
    Ubuntu +PHP-fpm + Nginx 访问php界面空白的界面的分析
    Erlang 语言简介
    坐标体系WGS84/GCJ02/BD09
    Linux 系统的启动顺序
    母板页 难点---数据交换
    用户控件(二)--常见4 种路径问题解决:
    XML语言:可扩展的标记语言;
    用户控件(一) ----交换信息
    单选款复选款的选择并操作方法
    生成指定格式的流水号
  • 原文地址:https://www.cnblogs.com/goxcheer/p/8761486.html
Copyright © 2020-2023  润新知