Normalmente deben evitarse, pero la función está ahí por una razón y hay momentos para usarla. Diría que el 90+% de los cursores que he visto no son necesarios. Si los está utilizando para operaciones CRUD, eso casi siempre se puede rehacer de forma basada en conjuntos. A menudo he visto a personas usar cursores para esto porque no saben cómo usar uniones en una actualización o eliminación o que pueden usar una declaración de selección en lugar de una cláusula de valores en una inserción. Otro uso innecesario cuando las personas piensan que los necesitan para un procesamiento un poco más complejo que en realidad podría manejarse fácilmente con una declaración de caso.
Los cursores a veces son más rápidos para calcular algo como un total acumulado.
Los cursores también son útiles para múltiples ejecuciones de un proceso almacenado que está configurado para manejar solo un valor de entrada a la vez. No utilizo esta función para ejecutar procesos almacenados por el usuario (a menos que sepa que voy a acceder a un conjunto de datos muy pequeño), pero es muy útil para los administradores de bases de datos cuando necesitan ejecutar procesos del sistema en varias tablas.
Si está creando correos electrónicos en SQl (no es el mejor lugar para hacerlo, pero en algunos sistemas es donde lo hacen) y no desea que toda la audiencia del correo electrónico vea a las otras personas en la lista o desea personalizar cada uno correo electrónico con información sobre el destinatario, los cursores son el camino a seguir.
Los cursores o los bucles también se pueden usar para procesar lotes de registros si la inserción/actualización/eliminación completa basada en conjuntos tomará demasiado tiempo y bloqueará las tablas. Esta es una especie de híbrido entre los cursores y la solución basada en conjuntos y, a menudo, es la mejor para grandes cambios en los sistemas de producción.