Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQLServer2008中替换游标的最佳方法_Sql_Sql Server 2008_Stored Procedures_Cursor - Fatal编程技术网

在SQLServer2008中替换游标的最佳方法

在SQLServer2008中替换游标的最佳方法,sql,sql-server-2008,stored-procedures,cursor,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, @correctionquantit

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

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
替换此光标以提高性能的最佳方法是什么


有什么建议吗

这里有一个选择,但我做了几个假设

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

  • SP INSERT#prod只执行
    INSERT
    ,不执行其他数据操作
  • SP INSERT#prod插入一个名为
    prod
    的表,该表中只有三列

  • 这里有一个选择,但我做了一些假设

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

  • SP INSERT#prod只执行
    INSERT
    ,不执行其他数据操作
  • SP INSERT#prod插入一个名为
    prod
    的表,该表中只有三列

  • 通过保持第n行的值,可以使用WHILE循环代替游标。与游标相比,它的性能太好了。如果您清楚地告诉我们您需要什么,那么我们可以走同一条路。

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

    您将需要重新编写游标中调用的存储过程,以对游标迭代的整个数据集进行操作,而不是一次只对一行进行操作。其他任何内容仍然是逐行的,这不会比这里使用的游标更有效…如果发布存储过程的定义,我们可以就如何实现这一点提供建议…需要对
    exec INSERT#prod
    进行更多描述您需要重新编写游标中调用的存储过程,以对游标迭代的整个数据集进行操作,而不是一次对一行进行操作。其他任何内容仍然是逐行的,这将比这里使用的游标没有效率…如果您发布存储过程的定义,我们可以提供如何执行的建议…需要更多关于
    exec INSERT\prod