在SQL Server 2008中替换游标的最佳方法

时间:2013-03-20 18:38:35

标签: sql sql-server-2008 stored-procedures cursor

我想替换存储过程中的游标代码

DECLARE CursorXD CURSOR FOR
   SELECT 
       IDOrdre, Quantity,fabnum
   FROM prod_ordreplanificationdetail
   WHERE fab = @num
     AND ordre = @ord

OPEN CursorXD 

FETCH NEXT FROM CursorXD INTO @correctionnumsap, @correctionquantite, @correctionnumfabrication

WHILE @@FETCH_STATUS = 0
BEGIN
   EXEC INSERT#prod @idordre = @correctionnumsap,
                    @quantite = @correctionquantiteneg,
                    @fabnum = @correctionnumfabrication

   FETCH NEXT FROM CursorXD INTO @correctionnumsap, @correctionquantite, @correctionnumfabrication
END

CLOSE CursorXD 
DEALLOCATE CursorXD

替换此游标以提高性能的最佳方法是什么?

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

这是一个选项,但我做了几个假设

INSERT INTO prod
SELECT IDOrdre, Quantity,fabnum
FROM prod_ordreplanificationdetail
WHERE fab=@num
  AND ordre=@ord

假设:

  1. SP INSERT#prod只执行INSERT而没有其他数据操作
  2. SP INSERT#prod插入名为prod的表格中,表格中只有三列

答案 1 :(得分:0)

通过保持第n行值,可以使用WHILE循环而不是CURSOR。与CURSOR相比,它的性能太好了。如果你清楚地告诉你需要什么,那么我们可以走同样的道路。