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

28/08/2012

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

עמודות מחושבות המתבססות זו על זו

15/08/2012

נניח שאנחנו מעוניינים להפיק דוח אילו אובייקטים השתנו ומתי (דוגמה מעט מאולצת להמחשה בלבד): Select name, Create_Date, modify_date, DateDiff(Day,create_date,modify_date) DayDiff, Case When DayDiff=0 Then 'Not Changed' Else 'Changed' End Changed, Case When Changed='Changed' And...
אין תגובות

הוספת ימי עסקים

14/08/2012

התאריך הוא 10/08/2012 ואנחנו מעוניינים לדעת מה יהיה התאריך בעוד 30 ימי עסקים. נניח שימי העסקים הם שני-שישי כמקובל בעולם המערבי, ונתעלם מימי שבתון אחרים מלבד שבת-ראשון. הבעייה במקרה זה פשוטה: 30 ימי עסקים הם 6 שבועות בדיוק, נוסיף 6 שבועות ליום שישי 10/08/2012 ונגיע ליום שישי 21/09/2012. מה קורה אם רוצים להוסיף 32 ימי עסקים? הבעייה מסתבכת: יש להוסיף 32/5=6 שבועות (=> יום שישי 21/09/2012) ועוד 32%5=2 ימים, ומכיוון שמדובר ביום שישי – צריך להגיע ליום שלישי 25/09/2012 ולא ליום ראשון 23/09/2012.. איך נדע אם יש סוף שבוע באמצע או...
אין תגובות

ממוצעים נעים

11/08/2012

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

מסכת קלט ב-SQL Server

04/08/2012

נפתח בהנמכת ציפיות- אין מסכת קלט ב-SQL Server: הוא אינו מספק לנו ממשק משתמש ואין זה מתפקידו לזעוק חמס אם המשתמש מקליד אותיות במקום ספרות וכו'. זאת ועוד- יכולותיו בניתוח מחרוזות טקסט מוגבלות, ובמקרה הצורך יש לכתוב פרוצדורות מתאימות ב-Clr.. עדיין, ניתן לעשות הרבה מאוד גם בעזרת המעט שהמערכת מציעה, כל זאת כאשר אנו מצויידים בתושיה, יצירתיות ורוח קרב! דוגמה לבעייה- יש לבדוק האם מחרוזות מסויימת עונה לתנאי AAA999999AA9, כלומר, צירוף של אותיות וספרות כאשר A מייצגת אות ו-9 ספרה: Declare @Sn Varchar(Max)=''; --digit ...
2 תגובות

שינוי פונקציה שנעשה בה שימוש בעמודה מחושבת

02/08/2012

יצרנו טבלה ובה עמודה מחושבת המציגה ערך של פונקציה, ואנחנו מעוניינים לשנות את הפונקציה. לכאורה משימה טריוויאלית של Alter Function או לחילופין Drop & Create Function, אלא שמתברר שלא ניתן לעשות זאת במקרה זה. דוגמה- ניצור פונקצייה סקלרית פשוטה המחזירה מחרוזת בת שישה תווים הכוללת את מספר החודש ומספר השנה: Use tempdb; Go   If Object_ID('MyFnc','FN') Is Not Null Drop Function MyFnc; Go   Create Function dbo.MyFnc(@D...