1

セットベースのソリューションが理想的であり、一般的にカーソルよりも優れていることはわかっています。だからお願い。「カーソルを使用せず、セットベースの操作を使用する」という回答を控えることで、あなたと私の時間を節約してください。私のグーグルは何の答えも与えておらず、知識はおそらく経験から来ているので、私はこれを求めています:

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: 本当に興味のある方のために、はい、問題はセットベースのアプローチに書き直される可能性がありますが、上層部からのいくつかの決定により、プライマリ テーブルに作成された新しい行は、ストアド プロシージャを使用して作成/挿入する必要があります。 .

4

2 に答える 2

0

whileループ内で「fetch next from」と「fetch next」を使用することに違いはありますか

いいえ -NEXTオプションが指定されていない場合のデフォルトです

select row_number() ..., ... from ... into ...それで、インデックス変数とそれを使用して反復する理由はありselect * from #tmp table where RowNumber = @IndexVarますか?

静的カーソルには、一時テーブルを作成して各反復で特定の行を検索するよりも高速に実行される最適化があると思いますが、試してみる必要があります。

fast_forward ローカル カーソルがあり、このカーソル内で、カーソルが選択するテーブルに対して挿入/更新操作が実行される場合、問題はありますか? (可能なサイクルなど?)

「サイクル」の意味がわかりません-基になるデータが変更されると、カーソルも変更されます(宣言しない限りSTATIC

fast_forward カーソルに強制的に静的/動的プランを使用させる方法はありますか?

試したことはありませんが、カーソルを定義するときに使用OPTION( USE PLAN ...)してみてください。SELECTうまくいかない理由が思いつきません。

私はこれに腹を立てています、そしてグーグルは無知です

Google は人々がインターネットに投稿したものを報告するだけです.なぜあなたは怒っているのですか? どのような問題を解決しようとしていますか?

于 2013-07-09T21:46:53.560 に答える