כתבתי פעם פוסט על Cursors והאופציות השונות שלהן.
מכיוון שאחת לכמה שבועות אני צריך להשתמש ב-Cursor ואין שום סיכוי שאזכור בעל פה את כל הפקודות, אני שומר במקום סודי Template משלי, משתמש בו, וגם מעדכן אותו כשאני משתכנע שעדיף אחרת:
Declare @.. ..;
If Cursor_Status('local','Cr') In (0,1) Or Cursor_Status('global','Cr') In (0,1)
Begin
Close Cr;
Deallocate Cr;
End
Declare Cr Cursor Fast_Forward For Select .. From ..;
Open Cr;
Fetch Cr Into @..;
While @@Fetch_Status = 0
Begin
.
.
Fetch Cr Into @..;
End
Close Cr;
Deallocate Cr;
שורות 2-5 (תנאי If) התווספו היום: בשלב הדיבוג, כשהתוכנית מרבה ליפול, צריך "לסגור" את ה-Cursor לפני שמפעילים אותו שוב אם הוא לא נסגר בצורה מסודרת.
התנאי בודק אם הוא פתוח, ואם כן- סוגר וממשיך הלאה; וכך חוסך שימוש לא נאות בניבולי פה, שזה מה שאני עושה כאשר אני מקבל הודעה כזו: