我有一个Cursor并希望删除存储过程并使用基于集合的操作或任何其他方法或建议。
可能的修复:
添加While循环
WHILE @currentRow<=@rowCount
BEGIN
-- EXEC Create_Sales_Orders
SET @currentRow = @currentRow + 1
END
我的光标
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
答案 0 :(得分:0)
你仍然坚持逐行处理,至少没有完全将Create_Sales_Orders主体内联到主查询中,但它看起来不是一件容易的事(&#34;调用系列插入和更新&#34;)。
没有必要将光标替换为任何其他循环,只需使用FAST_FORWARD
光标即可。
答案 1 :(得分:0)
我要重写Create_Sales_Orders以加快速度