好象
DECLARE CUR_CHEAPEST CURSOR SCROLL
FOR
SELECT AGIOTYPE,AGIOPARA,AGIOVALUE FROM T_FEEAGIO WHERE SUBSTRING (AGIOSEGMENT,@iBeginhour+1,1)='1' ORDER BY AGIOVALUE    
要放到WHILE (@iCounter>0)里面

解决方案 »

  1.   

    DECLARE CUR_CHEAPEST CURSOR SCROLL
    FOR
    SELECT AGIOTYPE,AGIOPARA,AGIOVALUE FROM T_FEEAGIO WHERE SUBSTRING (AGIOSEGMENT,@iBeginhour+1,1)='1' ORDER BY AGIOVALUE  
    OPEN CUR_CHEAPEST   
    FETCH NEXT FROM CUR_CHEAP INTO @bAgiotype,@sAgiopara,@dAgiovalue       
    WHILE (@iCounter>0)
     BEGIN
      FETCH NEXT FROM CUR_CHEAP INTO @bAgiotype,@sAgiopara,@dAgiovalue
      WHILE (@@FETCH_STATUS=0)
       BEGIN  
         ....
       END
      CLOSE CUR_CHEAPEST
      SET @iBeginhour=@iBeginhour+1
      SET @iCounter=@iCounter-1
     END
    DEALLOCATE CUR_CHEAPEST
      

  2.   

    用Execute sp_executesql @sSql来建立、打开、读取、关闭、删除等操作。
      

  3.   

    CrazyFor(Fan),我又试了一下,还是不行,每次的@@FETCH_STATUS都是第一次定义时的@@FETCH_STATUS的值,说明游标根本没变化啊
      

  4.   

    up不是我的本意,作废!嘿嘿
    DECLARE CUR_CHEAPEST CURSOR SCROLL
    FOR
    SELECT AGIOTYPE,AGIOPARA,AGIOVALUE FROM T_FEEAGIO WHERE SUBSTRING (AGIOSEGMENT,@iBeginhour+1,1)='1' ORDER BY AGIOVALUE  
    OPEN CUR_CHEAPEST   
    FETCH NEXT FROM CUR_CHEAP INTO @bAgiotype,@sAgiopara,@dAgiovalue       
    WHILE (@iCounter>0)
     BEGIN  
      WHILE (@@FETCH_STATUS=0)
       BEGIN  
         ....
       END
      FETCH NEXT FROM CUR_CHEAP INTO @bAgiotype,@sAgiopara,@dAgiovalue  
      SET @iBeginhour=@iBeginhour+1
      SET @iCounter=@iCounter-1
     END
    CLOSE CUR_CHEAPEST
    DEALLOCATE CUR_CHEAPEST
      

  5.   

    DECLARE CUR_CHEAPEST CURSOR SCROLL
    FOR
    SELECT AGIOTYPE,AGIOPARA,AGIOVALUE FROM T_FEEAGIO WHERE SUBSTRING (AGIOSEGMENT,@iBeginhour+1,1)='1' ORDER BY AGIOVALUE  
    OPEN CUR_CHEAPEST   
    FETCH NEXT FROM CUR_CHEAP INTO @bAgiotype,@sAgiopara,@dAgiovalue       
    WHILE (@iCounter>0)
     BEGIN  
      WHILE (@@FETCH_STATUS=0)
       BEGIN  
         ....
         FETCH NEXT FROM CUR_CHEAP INTO @bAgiotype,@sAgiopara,@dAgiovalue  
       END  
      SET @iBeginhour=@iBeginhour+1
      SET @iCounter=@iCounter-1
     END
    CLOSE CUR_CHEAPEST
    DEALLOCATE CUR_CHEAPEST
    把FETCH放到循环里面可以吗?
      

  6.   

    关键是游标是由一个参数组成的SQL语句生成的,每次游标得出的值都不一样!
      

  7.   

    DECLARE CUR_CHEAPEST CURSOR local
    FOR这样试试,
      

  8.   

    帮助中语法:DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR 
    FOR select_statement 
    所以DECLARE CUR_CHEAPEST CURSOR SCROLL FOR 是有问题的,应该是DECLARE CUR_CHEAPEST SCROLL CURSOR 
    FOR再改成下面的试试DECLARE CUR_CHEAPEST SCROLL CURSOR LOCAL
    FOR
      

  9.   

    *************************************************
    WHILE (@iCounter>0)
    BEGIN
    DECLARE CUR_CHEAPEST CURSOR SCROLL
    FOR
    SELECT AGIOTYPE,AGIOPARA,AGIOVALUE FROM T_FEEAGIO WHERE SUBSTRING (AGIOSEGMENT,@iBeginhour+1,1)='1' ORDER BY AGIOVALUE         
    OPEN CUR_CHEAPEST   
    FETCH NEXT FROM CUR_CHEAP INTO @bAgiotype,@sAgiopara,@dAgiovalue
    WHILE (@@FETCH_STATUS=0)
    BEGIN  
    ....
    END
    CLOSE CUR_CHEAPEST
    SET @iBeginhour=@iBeginhour+1
    SET @iCounter=@iCounter-1
    DEALLOCATE CUR_CHEAPEST
    END
    ***********************************************
    参数变化后要重新定义游标,试试看上面的