之前一直在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也並沒有想象中那么復雜,熟悉了都一樣
在這里學會了游標的使用

