之前一直在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也并没有想象中那么复杂,熟悉了都一样
在这里学会了游标的使用