需要重写游标

时间:2014-04-17 13:32:32

标签: sql sql-server tsql sql-server-2005

我有一个Cursor并希望删除存储过程并使用基于集合的操作或任何其他方法或建议。

可能的修复:

  1. 将FOR子句添加到现有存储过程(Create_Sales_Orders)
  2. 添加While循环

    WHILE @currentRow<=@rowCount
    BEGIN
        -- EXEC Create_Sales_Orders
    
        SET  @currentRow = @currentRow + 1
    END 
    
  3. 我的光标

    DECLARE MyCNT CURSOR FOR
    
            ................
    
            -- Select statement Returns 6 columns and 69 rows of data
    
            ................
        OPEN MyCNT
              FETCH NEXT FROM MyCNT INTO @StoreId,@DateToProcess,@Cus_source_id,@Cus_id,@Pos_Source_id,@POS_Id 
                   WHILE (@@FETCH_STATUS = 0)
                       BEGIN
    
                           EXEC Create_Sales_Orders   --> looking to get rid of this....take a long time to run
                                @StoreId, 
                                @DateToProcess,
                                @Cus_source_id,
                                @Cus_id,
                                @Pos_Source_id,
                                @POS_Id    
    
    
                       FETCH NEXT FROM MyCNT INTO @StoreId,@DateToProcess,@Cus_source_id,@Cus_id,@Pos_Source_id,@POS_Id 
                   END
        CLOSE MyCNT
        DEALLOCATE MyCNT
    

2 个答案:

答案 0 :(得分:0)

你仍然坚持逐行处理,至少没有完全将Create_Sales_Orders主体内联到主查询中,但它看起来不是一件容易的事(&#34;调用系列插入和更新&#34;)。

没有必要将光标替换为任何其他循环,只需使用FAST_FORWARD光标即可。

答案 1 :(得分:0)

我要重写Create_Sales_Orders以加快速度