הקצאת משאבים למשימות

יום שישי, נובמבר 20, 2015

אתגר שצץ לו מרחבי הרשת: יש משימות שלכל אחת מועד התחלה ומועד סיום, למשל – טיולים מאורגנים שנמשכים מספר ימים, מי יותר ומי פחות, וכל אחד מתחיל במועד אחר. בנוסף יש אוטובוסים שצריך להקצות לאותן משימות: את אוטובוס 1 נקצה למשימה הראשונה, למשימה 2 נקצה את אוטובוס 1 רק אם הוא סיים בינתיים את משימתו, ולא – את אוטובוס 2 וכך הלאה. לכל משימה נחפש את האוטובוס הפנוי הראשון ואותו נקצה.ברור שאם כל המשימות קורות בו זמנית נצטרך אוטובוסים כמספר המשימות ואז האתגר לא יהיה מעניין, אך בהנחה שחלק מסתיימות בטרם האחרות מתחילות – מספר האוטובוסים שנצטרך לכולן הוא...
אין תגובות

Cursor עם SQL דינאמי

יום שלישי, ספטמבר 4, 2012

נניח שיש לנו צורך ב-Cursor הכולל SQL דינאמי. למשל: אנחנו כותבים פרוצדורה שמקבלת שם של דטבייס, וצריכה לעבור בעזרת Cursor על כל האינדקסים באותו דטבייס לצורכי תחזוקה. לו הפרוצדורה הייתה מיועדת לדטבייס ספציפי לא הייתה בעייה לכתוב משהו כזה- Declare Cr Cursor Fast_Forward For Select name From AdventureWorks.sys.indexes Where type_desc<>'HEAP'; Declare @name sysname; Open Cr; Fetch Cr Into @name; While @@Fetch_Status = 0 ...
תגובה אחת

SQL Server: סוגים שונים של לולאות

יום שלישי, אוגוסט 28, 2012

SQL Server נועד לטפל בסטים בעזרת פקודות DML, ולכן השימוש בלולאות אינו טבעי עבורו. יכול להיות שהמערכת משתמשת בלולאות מאחורי הקלעים לשליפה או עדכון טבלאות, אך מבחינת המשתמש מתבצעות טרנזקציות על סטים. עדיין, יש נסיבות בהן נצטרך להשתמש בלולאות. למשל- בפעולות תחזוקה שונות בהן אנחנו עובדים עם טבלאות מערכת (טבלת דטבייסים, טבלת אינדקסים) בהן כל שורה מייצגת אובייקט, ויש לבצע פעולה מסויימת על כל אובייקט. יתכנו גם מקרים נדירים בהם נצטרך להשתמש בלולאות לטיפול בטבלאות "רגילות", אך ככלל- יש להימנע עד כמה שאפשר מלהשתמש בלולאות ולהעדיף פעולות DML. כשנוצר צורך מוצדק להשתמש בלולאה-...
אין תגובות

עיצוב פקודות SQL דינאמיות

יום שישי, ינואר 14, 2011

פקודת SQL אמורה להיות מעוצבת בצורה נוחה לקריאה מבחינת מעברי שורות, הזחה (Identization), שימוש ב-Capitals & Italics וכו'. אין לכך השפעה על הביצועים של המערכת, אבל כן על הביצועים של המפתח - ובעיקר אם לא הוא זה שכתב את הקוד: קשה להבין קוד שאינו ערוך נכון, וכשאני מתבקש לדבג או לתקן קטע קוד - אני קודם כל מסדר אותו בצורה נוחה לפני שאני צולל לעובי הקורה.. כך גם בעת שימוש ב-SQL דינאמי: פקודות ה-SQL נוצרות ומורצות על ידי הקוד, לא תמיד פשוט לבנות נכון את הפקודות, וגם אותן יש לדבג ולעיתים אף לשמור בטבלת לוג...
תגובה אחת

Cursor ללא Cursor

יום שבת, ספטמבר 11, 2010

השימוש ב-Cursor הוא דרך המלך למשימות שלא ניתן לבצע בכלים הסטנדרטיים של SQL, למשל – כפי שיודגם להלן – גיבוי כל הדטבייסים בשרת שאינם System Databases. הפתרון הסטנדרטי בעזרת Cursor הוא כזה: Declare @S Varchar(Max), @SQL Varchar(Max); Declare Cr Cursor For Select name From sys.databases Where name Not In ('master','tempdb','model','msdb'); Open Cr; Fetch Cr Into @S; While @@Fetch_Status = 0 Begin Set @SQL='Backup Database '+@S+' To Disk = ''C:\Tmp\'+@S+'.bak'';'; Print @SQL; Exec(@SQL); Fetch Cr Into @S; End Close...
אין תגובות