مثال حول الحلقات التكرارية في TSQL

الناقل : elmasry | الكاتب الأصلى : خضر ترزي | المصدر : www.arabteam2000-forum.com

في الكثير من الاحيان قد تحتاج الى Stored Procedure للقيام بعملية احتساب معينة، بالطبع عبارات ال SQL البسيطة بامكانها القايم باحتسابات كثيرة و بصورة شاملة على الجدول بكامله، و لكن في بعض الاحيان فانت تحتاج الى حلقة تكرارية للقيام باحتساب ما

الحلقة التكرارية سوف تسمح لك بالوصول الى السجلات واحد بعد الاخر للقيام بمعالجتهم.

بالطبع بامكانك بناء Modle في قاعدة البيانات و استخدام ADO للقيام بكل العملية بلغة فيجوال بيزك ، و لكن ان انتبهت قليلا سوف تلاحظ بان ذلك ال Module يقوم بسحب البيانات عبر الشبكة من SQL Server الى الجهاز لاحتسابها و من ثم ارجاعها ، و بذلك سوف يصبح البرنامج بطيئ خصوصا اذا الاحتساب او العملية المطلوبة على السجلات معقدة و طويلة و عدد السجلات كبير.

الطريقة الثانية لحل المشكلة لمحبي فيجوال بيزك للتطبيقات هي فصل ال Module من قاعدة البيانات عبر ال Microsoft Office Developer XP و حفظه في ملف DLL و تخزينه في الجهاز المركزي و تعريفه في DCOM+. و بالطبع ربطه مع قاعدة البيانات في الجهاز العادي.

الطريقة الساقة بسيطة جدا حيث انها لن تحتاج الا الى امرين اضافيين لربط و سوف تنهي مسئلة تحريك عدد هائل من البيانات عبر الشبكة حيث ان ملف ال DLL و الذي يحتوي على ال function او ال Sub التي تقوم بالعملية هي على نفس الجهاز المركزي.

السرعة سوف تزيد كثيرا و لكنها لن تصل الى اقصى حد ممكن لها

الحد الاقصى الممكن هو بناء كود TSQL للقيام بالعملية ، احد الامور التي تبعد الكثيرين من استخدامه هو تخوفهم من الحلقات التكرارية، حيث كل المطلوب هي بناء Stored Procedure في Microsoft Access و عند النقر المزدوج عليها او عبر استدعائها بواسطة الكود سوف تنفذ مباشرة في الجهاز المركزي في SQL Server.

عملية بسيطة للغاية اليس كذلك :) ؟

اليكم الكود المطلوب لحلقة تكرارية

CODE2

DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName FROM Northwind.dbo.Employees
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN

ضع هنا الكود المطلوب بداخل الحلقة
FETCH NEXT FROM Employee_Cursor
END
CLOSE Employee_Cursor
DEALLOCATE Employee_Cursor