在我因为性能问题而尝试避免使用游标之前。但现在我必须做一些计算才能达到一些目标。我有一个存储过程,其代码如下:
DECLARE Outer_Cursor CURSOR FOR...
OPEN Outer_Cursor
FETCH NEXT FROM Outer_Cursor INTO ...
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE Inner_Cursor CURSOR FOR...
OPEN Outer_Cursor
FETCH NEXT FROM Inner_Cursor INTO ...
WHILE @@FETCH_STATUS = 0
BEGIN
...
FETCH NEXT FROM Inner_Cursor INTO ...
END
CLOSE Inner_Cursor
DEALLOCATE Inner_Cursor
FETCH NEXT FROM Outer_Cursor INTO ...
END
CLOSE Outer_Cursor
DEALLOCATE Outer_Cursor
我的问题是:是否有可能避免(最小化)内部光标如此昂贵的光标重建。如何重用内部游标声明,可能吗?
谢谢你。
我建议不要使用内部游标,如果你想避免在外部游标的每一步创建和释放它,使用临时表来获取数据并为每一步截断它。
这样您只需创建一次,并且不会记录截断操作,因此不会造成任何问题。
PS:在这种情况下,我总是支持带有标识列的临时表,该标识列将为每条记录(或批次:-) 循环。但我同意这些评论,最好告诉我们问题,也许我们会找到另一个解决方案。