しようとする前に カーソルの使用を避けてください パフォーマンスの問題のため。しかし今、私はいくつかの目標を達成するためにいくつかの計算をしなければなりません。次のようなコードを持つストアドプロシージャがあります。
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:この状況では、各レコード(またはバッチ:-)に対してループされるID列を持つ一時テーブルを常に支持しています。しかし、私はコメントに同意します。問題をよりよく教えてください。別の解決策が見つかるかもしれません。