セットベースのソリューションが理想的であり、一般的にカーソルよりも優れていることはわかっています。だからお願い。「カーソルを使用せず、セットベースの操作を使用する」という回答を控えることで、あなたと私の時間を節約してください。私のグーグルは何の答えも与えておらず、知識はおそらく経験から来ているので、私はこれを求めています:
1) FETCH NEXT FROM と FETCH FROMカーソル (fast_forward/static) を開いたとき、while ループ内で 'fetch next from' と 'fetch next' の使用に違いはありますか? パフォーマンスでは、アクセスされたレコードの順序など。
2) ROW_NUMBER + SELECT/WHILE vs STATIC CURSOR私が理解しているように、静的カーソルは、選択されたデータを含む一時テーブルを作成し、この一時テーブルに移動します。select row_number() ..., ... from ... into ...
それで、インデックス変数とそれを使用して反復する理由はありselect * from #tmp table where RowNumber = @IndexVar
ますか?
3) FAST_FORWARD - 壊れることはありますか? fast_forward ローカル カーソルがあり、このカーソル内で、カーソルが選択するテーブルに対して挿入/更新操作が実行される場合、問題はありますか? (可能なサイクルなど?)
4) PLAN FORCING fast_forward カーソルに強制的に静的/動的プランを使用させる方法はありますか?
ご回答ありがとうございました
PS: 本当に興味のある方のために、はい、問題はセットベースのアプローチに書き直される可能性がありますが、上層部からのいくつかの決定により、プライマリ テーブルに作成された新しい行は、ストアド プロシージャを使用して作成/挿入する必要があります。 .