ably ably برای هدایت شدن به سایت جدید اینجا کلیک کنید

آموزش برنامه نویسی

آموزش برنامه نویسی وب، اندروید، ویندوز , اسکیوال و...
Tell: 0912 097 5516
| Email: Hello@EduOnline.ir

آموزش 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: رکورد قبلی را بازیابی می کند.

 

نظرات (۱)

خیلی عالی و ساده و تمیز
دستون درد نکنه
پاسخ:
با عرض سلام
ممنون از لطف شما
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی
up
ما را در گوگل محبوب کنید