آموزش Cursor در SQL Sever
بسم الله الرحمن الرحیم
آموزش Cursor در SQL Sever
در بسیاری مواقع شما نیاز دارید اطلاعات را به صورت رکورد به رکورد بررسی کنید، اولین راه حل ایجاد یک برنامه است اما اگر بخواهیم این کار را در SQL انجام دهیم چطور؟ همانطور که مشخص است دستور SELECT این کار را برای ما انجام می دهد با این تفاوت که نمی توانیم تک تک رکوردها را بررسی کنیم بلکه خروجی دستور SELECT یک ResualtSet یا در واقع یک Dataset است.
دستور Cursor می تواند خروجی دستور SELECT را در حافظه نگه دارد و تک تک آنها را بررسی کند.
مثال
@id uniqueidentifier,
@userName varchar(20),
@password varchar(20)
DECLARE AccountRows CURSOR FOR SELECT id,userName,password FROM Account
AccountRows متغییری از جنس CURSOR تعریف کردیم تا اطلاعات را در خود ذخیره کند.
OPEN AccountRows
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM AccountRows
INTO
@id ,@userName,@password
PRINT @id
END
CLOSE AccountRows
DEALLOCATE AccountRow
WHILE @@FETCH_STATUS = 0 این دستور باعث می شود تا زمانی که رکوردی وجود دارد اطلاعات واکشی شود، متغییر مربوطه تا زمانی که رکوردی وجود دارد صفر نمی شود
حال ممکن است شما بخواهید رکوردی با اندیس خاص را بخوانید برای این کار می بایست CURSOR را به صورت SCROLL تعریف کنیم. مثال:
DECLARE @id uniqueidentifier
DECLARE @userName nvarchar(100)
DECLARE @password varchar(100)
DECLARE AccountRows SCROLL CURSOR FOR SELECT id,userName,password FROM Account
FOR UPDATE OF id,userName
OPEN AccountRows
FETCH ABSOLUTE 5 FROM AccountRows
UPDATE Account SET userName = 'ESH' WHERE CURRENT OF AccountRows
FETCH NEXT FROM AccountRows
FETCH RELATIVE 7 FROM AccountRows
FETCH PRIOR FROM AccountRows
FETCH ABSOLUTE 5 FROM AccountRows این دستور باعث می شود رکورد 5 بازیابی شود
FOR UPDATE OF id,userName این دستور مشخص می کند که فقط دو فیلد مشخص شده می توانند بروز شوند
WHERE CURRENT OF AccountRows این بخش دستور مشخص می کند که فقط رکورد واکشی شده جاری بروز شود
FETCH FIRST: به محل اولین رکورد می رود.
FETCH LAST: به محل آخرین رکورد می رود.
FETCH ABSOLUTE: به یک رکورد خاص می رود(اندیس در SQL با یک شروع می شود).
FETCH RELATIVE: اگر عدد مثبت بدهیم به جلو حرکت می کند و اگر عدد منفی بدهیم به عقب حرکت می کند.
FETCH PRIOR: رکورد قبلی را بازیابی می کند.
نظرات (۱)
با عرض سلام
ممنون از لطف شما