0

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

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

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

有什么建议吗?

4

2 回答 2

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中,表中只有三列
于 2013-03-20T18:53:58.227 回答
0

您可以通过维护第 n 行值来使用 WHILE 循环而不是 CURSOR。与 CURSOR 相比,它在性能方面太好了。如果你清楚地告诉你你需要什么,那么我们就可以走上同一条路。

于 2013-03-28T20:36:56.263 回答