记录一下自己的游标小脚本

---游标循环遍历--
begin
  declare @id int,@temp int,@error int
  set @error=0
  begin tran --申明事务
  --业务--
  update SmartPromoter set CustomerID=a.ID from SmartCustomer a,SmartPromoter b 
     where (a.Mobile=b.Mobile or a.MobileBackup=b.Mobile) and b.CustomerID is null and len(b.Mobile)=11

  declare promoter_cursor cursor for(select ID from SmartPromoter where CustomerID is null and len(Mobile)=11) --申明游标
   --打开游标--
  open promoter_cursor 
  --开始循环游标变量--
  fetch next from promoter_cursor into @temp
  while @@FETCH_STATUS=0 --返回被 FETCH语句执行的最后游标的状态--
    begin
      insert into SmartCustomer([Name],[Gender],[Mobile],[WeChat],[CreateTime],[ChannelID],[Remark],[CreateUserID],[Deposit],[Coupon],[Point],[CurrentExploitUserID],[CurrentManagerUserID],
      [VisitTimes],[ConsultTimes],[IsBlacklist],[IsGreylist],[HasComplain],[HasAppointment],[WechatBindTime],[MemberCategoryID],[CashCardTotalAmount]) 
      select Name,2,Mobile,Wechat,CreateTime,126,Remark,1,0,0,0,2,2,0,0,0,0,0,0,CreateTime,1,0 from SmartPromoter a where ID=@temp select @id = @@IDENTITY
      set @error= @error + @@ERROR --记录每次运行sql后是否正确,0正确
      update SmartPromoter set CustomerID=@id where ID=@temp
      set @error= @error + @@ERROR --记录每次运行sql后是否正确,0正确
        fetch next from promoter_cursor into @temp --转到下一个游标
    end
  --业务--
  insert into SmartPromoter([Name],[Mobile],[Address],[Status],[Account],[Password],[CreateTime],[Wechat],[CustomerID],[Balance])
    select a.Name,a.Mobile,a.Address,1,a.Mobile,'123456',a.CreateTime,a.WeChat,a.ID,0 from SmartCustomer a where  not exists (select ID from SmartPromoter b where a.ID=b.CustomerID) and LEN(Mobile)=11
   if @error=0
      begin
        commit tran   --提交事务
      end
      else
      begin
        rollback tran --回滚事务
      end
  close promoter_cursor  --关闭游标
  deallocate promoter_cursor   --释放游标
end

 

posted @ 2017-05-08 16:02  小破天  阅读(451)  评论(0编辑  收藏  举报