Felmerülhet a kérdés, hogy mi is az a kurzor, s mire lehet használni. Nos amikor végrehajtunk egy SELECT utasítást, akkor egyszerre kapunk meg minden sort. Ez nem mindig megfelelő, előfordulhat például, hogy egy adott sor visszakapott oszlopértékei alapján valamilyen műveletet szeretnénk végezni. Ehhez egy kurzort (sormutatót) kell használnunk, amellyel a z adatbázisból kinyert sorokat egyenként dolgozhatjuk fel. A kurzor segítségével végiglépkedhetünk az adott SELECT utasítás által visszaadott sorokon.
Kurzor használatakor a következő lépéseket kell követnünk:
Változókat vezetünk be a SELECT utasítás által visszaadott oszlopértékek tárolására.
Bevezetjük a kurzort, megadva a megfelelő SELECT utasítást.
Megnyitjuk a kurzort.
Kiolvassuk a sorokat a kurzorból.
Bezárjuk a kurzort.
Egy példaprogramon keresztül bemutatjuk a kurzorok használatát, mely megmutatja, hogy hogyan jeleníthetjük meg a kurzor segítségével a Products tábla ProductID, ProductName és UnitPrice oszlopait:
Use Northwind
-- 1. lépés: a változók bevezetése
DECLARE @MyProductID int
DECLARE @MyProductName nvarchar(40)
DECLARE @MyUnitPrice money
-- 2. lépés: a kurzor bevezetése
DECLARE ProductCursor CURSOR FOR
SELECT ProductID, ProductName, UnitPrice
FROM Products
WHERE ProductID <= 10
-- 3. lépés: a kurzor megnyitása
OPEN ProductCursor
-- 4. lépés: a sorok kiolvasása a kurzorból
FETCH NEXT FROM ProductCursor
INTO @MyProduct, @MyProductName, @MyUnitPrice
PRINT ’@MyProductID = ’ + CONVERT(nvarchar, @MyProductID)
PRINT ’@MyProductName = ’ + CONVERT(nvarchar, @MyProductName)
PRINT ’@MyUnitPrice = ’ + CONVERT(nvarchar, @MyUnitPrice)
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM ProductCursor
INTO @MyProductID, @MyProductName, @MyUnitPrice
PRINT ’@MyProductID = ’ + CONVERT(nvarchar, @MyProductID)
PRINT ’@MyProductName = ’ + CONVERT(nvarchar, @MyProductName)
PRINT ’@MyUnitPrice = ’ + CONVERT(nvarchar, @MyUnitPrice)
END
-- 5. lépés: a kurzor bezárása
CLOSE ProductCursor
DEALLOCATE ProductCursor