Normalt ska de undvikas, men funktionen finns där av en anledning och det finns tider att använda dem. Jag skulle säga att 90+% av markörerna jag har sett inte behövs. Om du använder dem för CRUD-operationer kan det nästan alltid göras om på ett set-baserat sätt. Jag har ofta sett folk använda markörer för detta eftersom de inte vet hur man använder joins i en uppdatering eller borttagning eller att de kan använda en select-statment istället för en värdesats i en insert. Ytterligare en onödig användning när folk tror att de behöver dem för lite mer komplex bearbetning som faktiskt enkelt skulle kunna hanteras med ett ärendeutlåtande.
Markörerna är ibland snabbare för att beräkna något som en löpande summa.
Markörer är också praktiska för flera körningar av en lagrad proc som är inställd för att hantera endast ett inmatningsvärde åt gången. Jag använder inte den här funktionen för att köra användarlagrade processer (såvida jag inte vet att jag kommer att träffa en mycket liten uppsättning data) men den är väldigt praktisk för databasadministratörer när de behöver köra systemprocesser mot flera tabeller.
Om du skapar e-postmeddelanden i SQL (inte det bästa stället att göra det på, men i vissa system är det där de gör det) och inte vill att hela e-postpubliken ska se de andra personerna på listan eller om du vill anpassa varje e-post med information om adressaten, markörer är vägen att gå.
Markörer eller loopar kan också användas för att bearbeta batcher av poster om hela den setbaserade infogningen/uppdateringen/raderingen tar för lång tid och låser tabellerna. Detta är en sorts hybrid mellan markörerna och den set-baserade lösningen och är ofta den bästa för stora förändringar i produktionssystem.