大概要执行200个循环,执行时间大概是五分钟左右。
在页面里执行总是报时间超时。这个应该如何优化,或者说页面发个命令直接后台执行 下面这段语句也可以
代码见下:
DECLARE @FCUSRNUMBER varchar(50)
DECLARE @FDATE VARCHAR(20)
SET @FDATE =CONVERT(varchar(20),DATEADD(MM,-1, GETDATE()),23)DECLARE My_Cursor CURSOR 
--定义游标FOR (select distinct FNUMBER  from T_BD_CUSTOMER where FPRIMARYGROUP in(select fid from T_BD_CUSTOMERGROUP where FPARENTID =1304274) and FDOCUMENTSTATUS ='C' and FFORBIDSTATUS='A') --查出需要的集合放到游标中OPEN My_Cursor; 
--打开游标
FETCH NEXT FROM My_Cursor INTO @FCUSRNUMBER; 
--读取第一行数据(将MemberAccount表中的UserId放到@UserId变量中)
WHILE @@FETCH_STATUS = 0    
BEGIN     --PRINT @FCUSRNUMBER; 
--打印数据(打印MemberAccount表中的UserId)   exec Pro_BAM_DeptReceiveAuto @FDATE,@FCUSRNUMBER 
FETCH NEXT FROM My_Cursor INTO @FCUSRNUMBER; --读取下一行数据(将MemberAccount表中的UserId放到@UserId变量中)   
ENDCLOSE My_Cursor;       --关闭游标
DEALLOCATE My_Cursor; --释放游标
GO

解决方案 »

  1.   

    使用游标的目的是什么?
    exec Pro_BAM_DeptReceiveAuto @FDATE,@FCUSRNUMBER   这个存储过程具体在做什么处理?
      

  2.   

    设置DBCommand的TimeOut时间
      

  3.   

    @hanjun0612  回复1楼:这个存储过程里面写的是计算单独每个门店每天的销量(相当于一个月的销量)插入到新的数据表里
      

  4.   

    我感觉需要优化sql语句,异步执行,把commandtimeout设为0。不能解决问题啊
      

  5.   

    如果可以的话,你试试给表增加 rownumber,然后通过循环来代替游标。
    看看效率会快一点吗。(当然,这里没有讨论你的exec Pro_BAM_DeptReceiveAuto,我不清楚你的exec Pro_BAM_DeptReceiveAuto是不是也很慢)
      

  6.   

    如果可以的话,你试试给表增加 rownumber,然后通过循环来代替游标。
    看看效率会快一点吗。(当然,这里没有讨论你的exec Pro_BAM_DeptReceiveAuto,我不清楚你的exec Pro_BAM_DeptReceiveAuto是不是也很慢)我试一下
      

  7.   

    如果可以的话,你试试给表增加 rownumber,然后通过循环来代替游标。
    看看效率会快一点吗。(当然,这里没有讨论你的exec Pro_BAM_DeptReceiveAuto,我不清楚你的exec Pro_BAM_DeptReceiveAuto是不是也很慢)我试一下我刚才 测试了一下,但是我要根据 number 执行存储过程,这里只有@i 变量,但是如果在根据i去取number,速度又慢了,这个怎么处理比较好!谢谢
      

  8.   

    你看看,循环内部,根据 rownum=@i找到你的这一行数据,然后调用exec Pro_BAM_DeptReceiveAuto方法
    参照
    http://www.cnblogs.com/wang-123/p/3746179.html