SQL Server - Section1 - استخدام Cursors في SQL Server

استخدام Cursors في SQL Server

الـ Cursor في SQL Server هو كائن يُستخدم للتنقل بين الصفوف في نتيجة استعلام، ومعالجة كل صف بشكل فردي.

🟢 تُستخدم Cursors عندما تحتاج إلى تنفيذ عمليات متسلسلة (row-by-row) بدلًا من التعامل مع النتائج دفعة واحدة.


✅ خطوات استخدام Cursor

  • تعريف Cursor باستخدام DECLARE
  • فتح Cursor باستخدام OPEN
  • جلب الصف الحالي باستخدام FETCH
  • تكرار الخطوة السابقة حتى انتهاء الصفوف
  • إغلاق Cursor باستخدام CLOSE
  • حذف Cursor باستخدام DEALLOCATE

🧪 مثال عملي: استخدام Cursor لقراءة أسماء العملاء


DECLARE @CustomerName VARCHAR(255);

DECLARE customer_cursor CURSOR FOR
SELECT CustomerName FROM Customers;

OPEN customer_cursor;

FETCH NEXT FROM customer_cursor INTO @CustomerName;

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @CustomerName;

    FETCH NEXT FROM customer_cursor INTO @CustomerName;
END;

CLOSE customer_cursor;
DEALLOCATE customer_cursor;

⬅ في هذا المثال نستخدم Cursor لطباعة أسماء العملاء واحدًا تلو الآخر.


📌 أنواع Cursors

  • STATIC: يأخذ نسخة ثابتة من البيانات، ولا يعكس التغييرات.
  • DYNAMIC: يعكس أي تغيير في البيانات أثناء التنقل.
  • FORWARD_ONLY: يمكن التنقل للأمام فقط (الأكثر استخدامًا).
  • KEYSET: يحتفظ بالمفاتيح فقط من نتيجة الاستعلام ويستخدمها للوصول إلى الصفوف الأصلية.

📝 ملاحظات مهمة

  • تُعد Cursors أقل كفاءة من العمليات الجماعية (set-based)، لذلك استخدمها فقط عند الضرورة.
  • يجب دائمًا إغلاق و إلغاء تخصيص Cursor لتجنب استهلاك الموارد.
  • تأكد من فحص @@FETCH_STATUS في كل حلقة لتفادي أخطاء التكرار.

تعليقات

المشاركات الشائعة من هذه المدونة

C# - Arrays

Entity Framework - ما هو ORM؟ ونبذة عن Dapper وNHibernate

Entity Framework - مقدمة عن Entity Framework