دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
اشارهگرها (Cursor) در Sql Serve
1404/07/29 -
کنترل PerformanceCounter در سی شارپ
1404/07/29 -
کنترل BindingSource در سی شارپ
1404/07/28 -
علت Attach نشدن دیتابیس در Sql Server
1404/07/28 -
کنترل ServiceController در سی شارپ
1404/07/27 -
تریگر (Trigger) در Sql Server
1404/07/27
اشارهگرها (Cursor) در Sql Serve
مقدمه
اشارهگرها (Cursor) در SQL Server ابزاری قدرتمند برای پردازش رکوردها به صورت سطر به سطر هستند.
برخلاف عملیات مبتنی بر مجموعه، که کل دادهها را یکجا پردازش میکنند، Cursor اجازه میدهد تا هر رکورد به صورت جداگانه بررسی و پردازش شود.
این قابلیت در سناریوهایی که منطق پیچیده شرطی وجود دارد یا ترتیب پردازش رکوردها اهمیت دارد، بسیار مفید است.
اگرچه استفاده بیش از حد از Cursor میتواند کارایی را کاهش دهد، اما در موقعیتهای خاص ضروری و مؤثر است.
مفهوم اشارهگرها (Cursor) در SQL Server
Cursor در SQL Server یک ابزار پیشرفته است که امکان پردازش هر رکورد به صورت جداگانه را فراهم میکند.
استفاده از Cursor زمانی مفید است که نیاز به اجرای منطق پیچیده یا پردازش ترتیبی دادهها داشته باشیم.
کاربرد اصلی اشارهگرها عبارتند از:
- پردازش دادهها سطر به سطر به جای عملیات مجموعهای.
- اجرای منطق شرطی پیچیده که با یک دستور SELECT ساده قابل انجام نیست.
- واکشی ترتیبی رکوردها و مدیریت دادههای مرتبط از چند جدول.
چرخه عمر اشارهگر (Cursor)
برای کار با Cursor، باید بدانید که هر اشارهگر در SQL Server دارای چرخهی عمر مشخصی است. درک و مدیریت درست این مراحل، نقش مهمی در بهینهسازی عملکرد و جلوگیری از هدررفت منابع سیستم دارد.
مراحل اصلی چرخهی عمر Cursor همراه با توضیح هر بخش آورده شده است:
1.DECLARE
تعریف Cursor و تعیین عبارت SELECT برای مشخص کردن رکوردهای هدف و ساختار دادهها.
2.OPEN
باز کردن Cursor برای آمادهسازی واکشی دادهها از مجموعه نتایج.
3.FETCH
واکشی یا دریافت رکوردها بهصورت ترتیبی (یکبهیک) تا زمانی که دادهها به پایان برسند.
4.CLOSE
بستن Cursor پس از اتمام پردازش جهت جلوگیری از قفل شدن منابع پایگاه داده.
5.DEALLOCATE
آزادسازی کامل منابع و حذف Cursor از حافظه سیستم جهت بازگرداندن کارایی بهینه.
انواع اشاره گرها (Cursor)
Cursorها انواع مختلفی دارند که هر کدام ویژگیها و کاربردهای خاص خود را دارند. انتخاب نوع مناسب Cursor میتواند تأثیر زیادی روی کارایی و دقت پردازش داشته باشد:
1.Forward-Only
فقط امکان حرکت به سمت جلو را دارد و سادهترین نوع Cursor محسوب میشود.
2.Static
نسخهای ثابت از دادهها ایجاد میکند و تغییرات بعدی در جدول اصلی را نمایش نمیدهد
3.Dynamic
تغییرات واقعی در دادهها را در هنگام پیمایش Cursor منعکس میکند.
4.Keyset-Driven
ترکیبی از Static و Dynamic است؛ تغییرات روی رکوردهای موجود دیده میشود، اما رکوردهای جدید اضافهشده نمایش داده نمیشوند.
نحوه ایجاد، استفاده و حذف Cursor
برای کار با Cursor در SQL Server، لازم است مراحل مشخصی را دنبال کنید تا پردازش رکوردها به صورت صحیح و مؤثر انجام شود.
فرض کنید جدولی به نام Employee داریم که شامل ستونهای EmpID، EmpName و Salary است.
با استفاده از Cursor میتوان هر رکورد را به صورت جداگانه واکشی و پردازش کرد.
مراحل کلی اجرای Cursor
اجرای یک Cursor شامل چند مرحله ساده اما ضروری است که مدیریت صحیح آنها باعث بهبود کارایی و جلوگیری از مصرف منابع اضافی میشود:
1. DECLARE: تعریف Cursor.
2. OPEN: آمادهسازی برای واکشی.
3. FETCH: دریافت رکوردها.
4. پردازش: عملیات روی رکوردها.
5. CLOSE: بستن Cursor.
6. DEALLOCATE: آزادسازی منابع.

مثال عملی استفاده از Cursor
برای درک بهتر عملکرد Cursor، میتوانیم یک مثال عملی بررسی کنیم.
در این مثال قصد داریم رکوردهای کارمندانی که حقوق آنها کمتر از ۲۰۰۰۰ است، پیدا کرده و حقوقشان را بهروزرسانی کنیم.
DECLARE @EmpID INT, @EmpName VARCHAR(50), @Salary INT;
DECLARE emp_cursor CURSOR FOR
SELECT EmpID, EmpName, Salary
FROM Employee
WHERE Salary < 20000;
OPEN emp_cursor;
FETCH NEXT FROM emp_cursor INTO @EmpID, @EmpName, @Salary;
WHILE @@FETCH_STATUS = 0
BEGIN
-- مثال: افزایش حقوق
UPDATE Employee
SET Salary = Salary + 1000
WHERE EmpID = @EmpID;
FETCH NEXT FROM emp_cursor INTO @EmpID, @EmpName, @Salary;
END;
CLOSE emp_cursor;
DEALLOCATE emp_cursor;
مزایا و معایب اشارهگرها (Cursor)
Cursor در SQL Server ابزار قدرتمندی است که امکان پردازش دادهها به صورت سطر به سطر را فراهم میکند.
با وجود کارایی بالا در سناریوهای پیچیده، استفاده نادرست از آن میتواند مصرف منابع را افزایش دهد و عملکرد پایگاه داده را تحت تأثیر قرار دهد.
مزایای Cursor
مزایای استفاده از Cursor زمانی آشکار میشود که نیاز به پردازش دقیق و کنترلشده روی هر رکورد باشد. مهمترین نکات عبارتند از:
- پردازش دقیق و سطر به سطر دادهها.
- امکان اجرای منطق پیچیده که با دستورهای ساده SQL قابل انجام نیست.
- مناسب برای اسکریپتها و عملیات نگهداری پایگاه داده.
معایب Cursor
با اینکه Cursor ابزار مفیدی است، اما معایبی نیز دارد که باید هنگام استفاده در نظر گرفته شود:
- مصرف بالای منابع در پردازش رکوردهای زیاد.
- کاهش کارایی نسبت به عملیات مبتنی بر مجموعه (set-based).
- نگهداری طولانی Cursor میتواند باعث افزایش قفلها و مصرف حافظه شود.
نکات اجرایی برای استفاده از اشارهگرها (Cursor)
برای استفاده بهینه از Cursor در SQL Server، رعایت برخی نکات اجرایی ضروری است تا هم عملکرد پایگاه داده حفظ شود و هم مصرف منابع کاهش یابد.
1. مدیریت صحیح Cursor باعث افزایش سرعت پردازش و جلوگیری از بروز خطاهای احتمالی میشود.
2. همیشه ابتدا بررسی کنید که آیا همان عملیات را میتوان با دستورات مبتنی بر مجموعه (set-based) انجام داد؛ استفاده از Cursor تنها در صورت ضرورت توصیه میشود.
3. بعد از OPEN حتماً از CLOSE و DEALLOCATE استفاده کنید تا منابع آزاد شوند.
4. برای Cursorهای حجیم یا طولانی، از گزینههایی مانند FAST_FORWARD بهره ببرید تا سرعت واکشی رکوردها افزایش یابد.
5. اگر چند Cursor به صورت همزمان باز هستند، مدیریت دقیق منابع و ترتیب بسته شدن آنها بسیار مهم است تا از مصرف حافظه و قفلهای غیرضروری جلوگیری شود.
🌟 آیا میخواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟
با دوره آموزشی SQL Server ما، شما میتوانید به راحتی و با روشی عملی، تمام مهارتهای لازم را یاد بگیرید!
این دوره به شما آموزش میدهد که چگونه دادهها را به بهترین شکل مدیریت کنید، گزارشهای قدرتمند بسازید و به تحلیلهای عمیق دست یابید.
با محتوای جذاب و پروژههای واقعی، شما نه تنها تئوری را یاد میگیرید، بلکه تواناییهای عملی خود را نیز تقویت میکنید.
پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشنتر بردارید!
مثالهای کاربردی بیشتر
برای درک عملی عملکرد Cursor، بررسی مثالهای واقعی بسیار مفید است.
در ادامه دو سناریوی کاربردی ارائه شده که نشان میدهد چگونه میتوان پردازش سطر به سطر رکوردها را به صورت کنترلشده انجام داد.
مثال ۱: افزایش حقوق کارمندان با سابقه بالا
در این مثال، کارمندانی که سابقه کاری بیش از ۵ سال دارند انتخاب شده و حقوق آنها به صورت خودکار افزایش مییابد:
DECLARE @EmpID INT, @Salary INT;
-- تعریف Cursor برای انتخاب کارمندانی با سابقه کاری بیش از ۵ سال
DECLARE highExp CURSOR FOR
SELECT EmpID, Salary FROM Employee WHERE YearsOfService > 5;
OPEN highExp;
FETCH NEXT FROM highExp INTO @EmpID, @Salary;
WHILE @@FETCH_STATUS = 0
BEGIN
-- افزایش حقوق کارمند
UPDATE Employee
SET Salary = @Salary + 2000
WHERE EmpID = @EmpID;
FETCH NEXT FROM highExp INTO @EmpID, @Salary;
END;
CLOSE highExp;
DEALLOCATE highExp;
مثال ۲: حذف رکوردهای موقت
این مثال نشان میدهد چگونه میتوان رکوردهای موقت یا علامتگذاری شده را به صورت سطر به سطر حذف کرد:
DECLARE @TempID INT;
-- تعریف Cursor برای انتخاب رکوردهای موقت
DECLARE delCursor CURSOR FOR
SELECT ID FROM TempTable WHERE Flag = 'Y';
OPEN delCursor;
FETCH NEXT FROM delCursor INTO @TempID;
WHILE @@FETCH_STATUS = 0
BEGIN
-- حذف رکورد موقت
DELETE FROM TempTable WHERE ID = @TempID;
FETCH NEXT FROM delCursor INTO @TempID;
END;
CLOSE delCursor;
DEALLOCATE delCursor;
پرسشهای اشارهگرها (Cursor) در Sql Serve
1. بهترین نوع Cursor برای حرکت سریع چیست؟
گزینه FAST_FORWARD معمولاً برای پردازش سریع و فقط حرکت رو به جلو مناسب است.
2. آیا همیشه باید از Cursor استفاده کنیم؟
خیر. ابتدا راهکار مبتنی بر مجموعه (set-based) را بررسی کنید. Cursor زمانی مناسب است که منطق پیچیده یا پردازش سطر به سطر لازم باشد.

نتیجهگیری
اشارهگرها (Cursor) در SQL Server ابزار قدرتمندی برای پردازش سطر به سطر دادهها هستند و در سناریوهای پیچیده بسیار کاربرد دارند.
با رعایت بهترین شیوهها و نکات اجرایی، میتوان از کارایی آن بهره برد و از مصرف غیرضروری منابع جلوگیری کرد.
دوره های مرتبط
آموزش پایگاه داده SqlServer
پایگاه داده Sqlserver یکی از پایگاه داده های مهم برای ذخیره اطلاعات محسوب میشود .








