Kurzory slouží pro sekvenční zpracování vybraných dat. Do dočasné tabulky se načtou data a nad nimi se provádí daná sekvence příkazů (uzavřených do bloku BEGIN ... END)
Pro lepší představu uvedu příklad použití:
V informačním systému potřebuji spočítat marži nad fakturami. Faktura obsahuje položky, na kterých je uvedena prodejní cena. Abych zjistil marži položky je třeba provést nad položkami několik výpočtů. Řešení: Kurzor načte do dočasné tabulky všechny položky označených faktur a pak je postupně prochází a nad každým provede sekvenci výpočtů . Po provedení výpočtů nad jedním řádkem se se přesune na řádek další.
Kurzor prochází postupně jednotlivé řádky výběru (použitím příkazu FETCH NEXT viz.příklad). Můžeme ale použít i tyto příkazy:
FETCH PRIOR (předchozí řádek)
FETCH LAST (poslední řádek)
FETCH FIRST (první řádek)
-- proměnné
DECLARE @IDPolozky int, @ProdejniCena numeric(19,2)
-- deklarace kurzoru
DECLARE cur_vypocet CURSOR FOR
-- data nad kterými bude kursor dělat výpočty
SELECT ID, Cena FROM TabPolozkyFaktur WHERE CisloFaktury = 2222
-- otevření kursoru
OPEN cur_vypocet
-- skok na první řádek a načtení dat do proměnných
FETCH NEXT FROM cur_vypocet INTO @IDPolozky, @ProdejniCena
-- pokud je úspěšné načtení proměnných (status 0) tak proveď příkazy
WHILE @@FETCH_STATUS=0
BEGIN
-- příkazy které provádíme
-- skok na další řádek a načtení dat do proměnných
FETCH NEXT FROM cur_vypocet INTO @IDPolozky, @ProdejniCena
END
-- uzavření kurzoru
CLOSE cur_vypocet
-- uvolnění z paměti
DEALLOCATE cur_vypocet