Normaal gesproken moeten ze worden vermeden, maar de functie is er met een reden en er zijn tijden om ze te gebruiken. Ik zou zeggen dat 90+% van de cursors die ik heb gezien niet nodig zijn. Als u ze gebruikt voor CRUD-bewerkingen, kan dat bijna altijd opnieuw worden gedaan op een set-gebaseerde manier. Ik heb vaak gezien dat mensen hiervoor cursors gebruiken omdat ze niet weten hoe ze joins in een update of delete moeten gebruiken of omdat ze een select-statement kunnen gebruiken in plaats van een value-clausule in een insert. Nog een onnodig gebruik wanneer mensen denken dat ze ze nodig hebben voor een iets complexere verwerking die eigenlijk gemakkelijk zou kunnen worden afgehandeld met een case-statement.
Cursors zijn soms sneller om zoiets als een lopend totaal te berekenen.
Cursors zijn ook handig voor meerdere uitvoeringen van een opgeslagen proces dat is ingesteld om slechts één invoerwaarde tegelijk te verwerken. Ik gebruik deze functie niet om door gebruikers opgeslagen processen uit te voeren (tenzij ik weet dat ik een zeer kleine set gegevens zal raken), maar het is erg handig voor databasebeheerders wanneer ze systeemprocessen op meerdere tabellen moeten uitvoeren.
Als u e-mails maakt in SQL (niet de beste plaats om het te doen, maar in sommige systemen is dat waar ze het doen) en u wilt niet dat het hele publiek van de e-mail de andere mensen op de lijst ziet of u wilt ze allemaal personaliseren e-mail met informatie over de geadresseerde, cursors zijn de juiste keuze.
Cursors of lussen kunnen ook worden gebruikt om batches met records te verwerken als het hele op een set gebaseerde invoegen/bijwerken/verwijderen te lang duurt en de tabellen blokkeren. Dit is een soort hybride tussen de cursors en de set-gebaseerde oplossing en is vaak de beste voor grote veranderingen op productiesystemen.