通常は回避する必要がありますが、この機能には理由があり、使用する場合があります。私が見たカーソルの90%以上は必要ないと思います。それらをCRUD操作に使用している場合、ほとんどの場合、セットベースの方法でやり直すことができます。更新または削除で結合を使用する方法がわからないため、または挿入で値句の代わりにselectステートメントを使用できるため、これにカーソルを使用する人をよく見かけます。ケースステートメントで実際に簡単に処理できる、少し複雑な処理に必要だと人々が考える場合のもう1つの不要な使用法。
累計などの計算では、カーソルの方が速い場合があります。
カーソルは、一度に1つの入力値のみを処理するように設定されたストアドプロシージャを複数回実行する場合にも便利です。この機能は、ユーザーストアドプロシージャの実行には使用しませんが(非常に少数のデータセットをヒットすることがわかっている場合を除く)、複数のテーブルに対してシステムプロシージャを実行する必要がある場合は、データベース管理者にとって非常に便利です。
SQlで電子メールを作成していて(それを行うのに最適な場所ではありませんが、一部のシステムではそれを行う場所です)、電子メールのすべてのオーディエンスにリストの他の人を見せたくない場合、またはそれぞれをパーソナライズしたい場合宛先に関する情報を電子メールで送信します。カーソルが最適です。
セットベースの挿入/更新/削除全体に時間がかかりすぎてテーブルがロックされる場合は、カーソルまたはループを使用してレコードのバッチを処理することもできます。これは、カーソルとセットベースのソリューションの一種のハイブリッドであり、多くの場合、本番システムでの大規模な変更に最適です。