使用游标的存储过程

USE [JSKEEP]--库名
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Proc_Enterprise_Info]
AS
--===============================================================================

  BEGIN
    DECLARE
      @id      VARCHAR(40),  ---信息id
      @unique_code  BIGINT,  --唯一编码
      @unique_codes BIGINT   --当前信息中的unique_code
    
    --给变量@unique_code赋值设置为最大唯一编码
    select @unique_code =  max(unique_code) from t_unified_enterprise_info;
    -- 定义游标.
    DECLARE mycursor CURSOR  FOR
    --根据psname和unique_code去重结果集
    select min(id) as id from t_unified_enterprise_info 
        where psname is not null and psname = ltrim(rtrim(psname)) group by psname,region_code having count(region_code)=1
    --打开游标
    OPEN mycursor
    --填充数据
    FETCH NEXT FROM mycursor INTO @id
    --判断游标的状态  
    -- 0 fetch语句成功      
    ---1 fetch语句失败或此行不在结果集中      
    ---2 被提取的行不存在  
    WHILE @@FETCH_STATUS = 0
      BEGIN
        --给变量@unique_code赋值设置为最大唯一编码(放在这里处理每条数据的时候都要进行一次查询,严重拖慢执行速度,所以提到上面去)
        --select @unique_code =  max(unique_code) from t_unified_enterprise_info;
        select @unique_codes = unique_code from t_unified_enterprise_info where id = @id;
        
        if (@unique_code is NULL )
            BEGIN
                set @unique_code = 110000000000;
            END
        else
            BEGIN
                    set @unique_code = @unique_code + 1;
            END
        --如果该条记录已经有唯一编码,则保持唯一编码不变
        if (@unique_codes>0)
            BEGIN
                set @unique_code = @unique_codes;
            END 
        
        update t_unified_enterprise_info set unique_code = @unique_code,main_or_child = 1 where id = @id;
        --用游标去取下一行记录
        FETCH NEXT FROM mycursor INTO @id
      END
    --关闭游标
    CLOSE mycursor
    --删除游标
    DEALLOCATE mycursor
  END    

 

上面代码是使用游标的参考例子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值