在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
假设:
INSERT
,不执行其他数据操作prod
的表,该表中只有三列这里有一个选择,但我做了一些假设
INSERT INTO prod
SELECT IDOrdre, Quantity,fabnum
FROM prod_ordreplanificationdetail
WHERE fab=@num
AND ordre=@ord
假设:
INSERT
,不执行其他数据操作prod
的表,该表中只有三列通过保持第n行的值,可以使用WHILE循环代替游标。与游标相比,它的性能太好了。如果您清楚地告诉我们您需要什么,那么我们可以走同一条路。您可以通过保持第n行的值来使用WHILE循环而不是游标。与游标相比,它的性能太好了。如果您清楚地告诉我们您需要什么,那么我们可以走同一条路。您将需要重新编写游标中调用的存储过程,以对游标迭代的整个数据集进行操作,而不是一次只对一行进行操作。其他任何内容仍然是逐行的,这不会比这里使用的游标更有效…如果发布存储过程的定义,我们可以就如何实现这一点提供建议…需要对
exec INSERT#prod
进行更多描述您需要重新编写游标中调用的存储过程,以对游标迭代的整个数据集进行操作,而不是一次对一行进行操作。其他任何内容仍然是逐行的,这将比这里使用的游标没有效率…如果您发布存储过程的定义,我们可以提供如何执行的建议…需要更多关于exec INSERT\prod